我实现了一个小型的 Django 应用程序(v4.0.4),其中包含一个 REST API - 用于检索一些数据的 GET 方法。接下来,我想使用 gunicorn+uvicorn 运行该项目,因为我在一篇文章中看到了比普通部署更好的基准性能。所以,我决定使用
wrk
工具来获取自己的基准测试结果。
这是我的测试结果:
命令 | Web服务器 | 协议 | 结果 (Req/Sec) |
---|---|---|---|
python manage.py runserver 0.0.0.0:8000 |
Django 默认 | wsgi | 13.06 |
gunicorn bitpin.wsgi:application --bind 0.0.0.0:8000 -w 2 |
gunicorn | wsgi | 45.20 |
gunicorn bitpin.asgi:application --bind 0.0.0.0:8000 -w 2 -k uvicorn.workers.UvicornWorker |
uvicorn+gunicorn | asgi | 22.17 |
然而,上面的结果显示了另外一件事情!
是否原因是我想要使用 asgi
,所以我必须为我的 API 视图使用 async
方法?如果是这样,我该如何将 Django REST API 视图更改为异步视图?
或者,我可能错过了某些配置?
[注意]:
I ran the benchmark using the following command:
wrk -t4 -c11 -d20s -H "Authorization: Token xxx" http://127.0.0.1:8000/api/v1/content/
It is worth mentioning that for this test I used two workers for
gunicorn
and it is obvious that the higher workers, the better the performance will be.