Python中如何使用sanic框架进行压力测试?

用 sanic 写了个服务

与 flask 编写的版本对比 rps 确实提高不少

但做压测的时候水平拓展 服务器(单核)加到 2 个以上 rps 就不变了 cpu 利用率不到 50%

查找许久无解

哪位能提供点建议呢?

cpu 为何利用率那么低,单个机器 cpu 利用率正常,2 个机器略不稳定,但也正常,继续加就 cpu 利用率很低


Python中如何使用sanic框架进行压力测试?
10 回复

有没有指定 worker 的数量?

app.run(workers=2)


用sanic做压力测试,直接上代码。我一般用locust,因为写起来简单,能模拟真实用户场景。

先装依赖:

pip install sanic locust

建个测试用的sanic应用 app.py

from sanic import Sanic, json

app = Sanic("TestApp")

@app.get("/")
async def index(request):
    return json({"message": "Hello, Locust!"})

@app.get("/api/data")
async def get_data(request):
    # 模拟一些处理
    await app.loop.run_in_executor(None, lambda: sum(range(10000)))
    return json({"data": [1, 2, 3, 4, 5]})

if __name__ == "__main__":
    app.run(host="0.0.0.0", port=8000, access_log=False)

再写locust测试文件 locustfile.py

from locust import HttpUser, task, between

class SanicUser(HttpUser):
    wait_time = between(0.5, 2.5)  # 用户等待时间
    
    @task(1)  # 权重为1
    def index_page(self):
        self.client.get("/")
    
    @task(3)  # 权重为3,更频繁调用
    def api_data(self):
        self.client.get("/api/data")

运行测试:

  1. 启动sanic服务:python app.py
  2. 另开终端运行locust:locust -f locustfile.py --host=http://localhost:8000
  3. 浏览器打开 http://localhost:8089,设置并发用户数、生成速率,开始测试

locust的Web界面会实时显示RPS、响应时间、失败率等指标。要生成报告就加--headless参数:

locust -f locustfile.py --host=http://localhost:8000 --headless -u 100 -r 10 -t 30s

这个命令模拟100用户,每秒启动10个,跑30秒。

用locust就行,配置简单数据直观。

gunicorn 跑的 开了四个 有猜测是不是在 worker 切换消耗了时间

sanic 建议裸跑吧

谢谢回复 为什么裸跑比较好呢?我试了下裸跑 还是会在第三台的时候 rps 上不去 cpu 利用不起来~~~

有人在生产系统上用过 sanic 吗?去年试图写个小应用,结果发现坑太多,就弃了,不知道现在什么情况。

我用 sanic 写个几个小应用 性能是可以的 我现在就是压测水平拓展发现有点问题 不知是我代码问题还是什么
不知有没有其他人遇到过

我一直在用 sanic, 都是裸跑的,
估摸着是 gunicorn 的问题

裸跑了 问题依旧 无法水平扩展 你几台机器?

搜了下 sanic,跟 flask 太像啦

回到顶部