更多互联网新鲜资讯、工作奇淫技巧关注原创【飞鱼在浪屿】(日更新)
这里测试的python异步框架几乎都与ASGI兼容(除了aiohttp)。
基准测试的目的不是测试部署(例如uvicorn与hypercorn等)或数据库(ORM,驱动程序),而是测试框架本身。基准检查检查请求解析(正文,标头,表单数据,查询),路由,响应。
接受请求并返回带有自定义动态标头的HTML响应解析上传的文件,将其存储在磁盘上并返回文本响应解析路径参数,查询字符串,JSON正文并返回JSON响应的综合统计。
测试硬件
该基准使用Github Action运行。根据github文档 ,运行的硬件规格为:
- 2核vCPU(Intel?Xeon?Platinum 8272CL(Cascade Lake),Intel?Xeon?8171M 2.1GHz(Skylake))
- 7 GB的RAM内存
- 14 GB的SSD磁盘空间
- 操作系统Ubuntu 20.04
使用gunicorn / uvicorn命令从docker运行ASGI应用程序:
gunicorn -k uvicorn.workers.UvicornWorker -b 0.0.0.0:8080 app:app
应用程序的源代码可以在此处找到 。
https://github.com/klen/py-frameworks-bench/tree/develop/frameworks
通过WRK实用程序收到结果:
wrk -d15s -t4 -c64 [URL]
基准测试包含三种测试:
- “简单”测试:接受请求并返回带有自定义动态标头的HTML响应。该测试仅模拟单个HTML响应。
- “上传”测试:接受上传的文件并将其存储在磁盘上。该测试模拟多部分表单数据处理并处理文件。
- “ API”测试:检查标头,解析路径参数,查询字符串,JSON正文并返回JSON响应。该测试模拟JSON REST API。
接受请求并返回带有自定义动态标头的HTML响应
该测试仅模拟单个HTML响应。按最大请求数/秒排序
框架 | 请求/秒 | 延迟50%(毫秒) | 延迟75%(毫秒) | 延迟平均(毫秒) |
blacksheep 1.0.3 | 13805 | 3.71 | 6.29 | 4.61 |
muffin 0.70 | 12636 | 4.02 | 6.97 | 5.04 |
falcon 3.0.0 | 11495 | 4.43 | 7.62 | 5.54 |
starlette 0.14.2 | 10599 | 4.77 | 8.22 | 6.01 |
emmett 2.2.1 | 9922 | 5.06 | 8.88 | 6.42 |
Fastapi 0.63.0 | 7262 | 6.89 | 12.15 | 8.80 |
Sanic 21.3.4 | 6360 | 7.89 | 13.76 | 10.05 |
aiohttp 3.7.4.post0 | 5088 | 12.40 | 12.88 | 12.58 |
quart 0.14.1 | 2771 | 21.87 | 25.84 | 23.09 |
django 3.2 | 1368 | 45.20 | 52.33 | 46.72 |
解析上传的文件,将其存储在磁盘上并返回文本响应
该测试模拟多部分表单数据处理并处理文件。按最大请求数/秒排序
框架 | 请求/秒 | 延迟50%(毫秒) | 延迟75%(毫秒) | 延迟平均(毫秒) |
blacksheep 1.0.3 | 4160 | 12.11 | 21.48 | 16.12 |
muffin 0.70 | 3203 | 15.87 | 27.90 | 19.96 |
falcon 3.0.0 | 3042 | 16.68 | 28.77 | 21.02 |
starlette 0.14.2 | 2747 | 18.59 | 31.54 | 23.34 |
emmett 2.2.1 | 1949年 | 25.65 | 45.74 | 32.79 |
Fastapi 0.63.0 | 1793年 | 27.77 | 49.93 | 35.64 |
Sanic 21.3.4 | 1788年 | 35.60 | 36.36 | 35.79 |
aiohttp 3.7.4.post0 | 1207 | 49.96 | 58.89 | 52.96 |
quart 0.14.1 | 1095 | 58.92 | 61.70 | 58.36 |
django 3.2 | 776 | 80.86 | 93.00 | 82.32 |
解析路径参数,查询字符串,JSON正文并返回JSON响应
该测试模拟一个简单的JSON REST API端点。按最大要求/秒排序
框架 | 请求/秒 | 延迟50%(毫秒) | 延迟75%(毫秒) | 延迟平均(毫秒) |
blacksheep 1.0.3 | 7499 | 6.74 | 12.06 | 8.51 |
muffin 0.70 | 7232 | 6.93 | 12.29 | 8.83 |
falcon 3.0.0 | 7070 | 7.05 | 12.58 | 9.02 |
starlette 0.14.2 | 5602 | 8.95 | 15.91 | 11.40 |
emmett 2.2.1 | 5379 | 9.19 | 16.35 | 11.89 |
Fastapi 0.63.0 | 5126 | 9.66 | 17.36 | 12.50 |
Sanic 21.3.4 | 4406 | 11.30 | 20.27 | 14.50 |
aiohttp 3.7.4.post0 | 3232 | 19.70 | 20.24 | 19.81 |
quart 0.14.1 | 1767 | 36.32 | 38.11 | 36.19 |
django 3.2 | 1146 | 54.00 | 62.70 | 55.80 |
综合统计
综合基准测试结果
按已完成的请求排序
框架 | 请求已完成 | 平均延迟50%(毫秒) | 平均延迟75%(毫秒) | 平均延迟(毫秒) |
blacksheep 1.0.3 | 381960 | 7.52 | 13.28 | 9.75 |
muffin 0.70 | 343635 | 8.98 | 15.82 | 11.34 |
falcon 3.0.0 | 322110 | 9.98 | 17.15 | 12.57 |
starlette 0.14.2 | 272250 | 13.12 | 23.29 | 16.73 |
emmett 2.2.1 | 243825 | 21.56 | 28.38 | 23.96 |
Fastapi 0.63.0 | 221715 | 11.25 | 19.63 | 14.32 |
Sanic 21.3.4 | 201915 | 15.32 | 27.45 | 19.65 |
aiohttp 3.7.4.post0 | 151620 | 22.57 | 23.16 | 22.73 |
quart 0.14.1 | 84495 | 39.04 | 41.88 | 39.21 |
django 3.2 | 49350 | 60.02 | 69.34 | 61.61 |
本文暂时没有评论,来添加一个吧(●'◡'●)