Python ASGI(Asynchronous Server Gateway Interface)框架是一种用于构建异步网络应用程序的框架,它是 WSGI(Web Server Gateway Interface)的异步版本。
本报告对四个 Python ASGI 框架进行了详细的性能比较:MicroPie、FastAPI、LiteStar、Starlette和 Quart。进行基准测试是为了评估它们在不同工作负载下处理高并发性的能力。
已测试的框架:
- MicroPie - “一款超微型 ASGI Python Web 框架,让您不再受束缚”
- FastAPI -“用于构建 API 的现代、快速(高性能)Web 框架”
- Starlette -“轻量级的 ASGI 框架 / 工具包,非常适合用 Python 构建异步 Web 服务”
- Quart - “流行的 Flask 微框架 API 的 asyncio 重新实现”
- LiteStar—— “轻松构建高性能 API”
测试场景:
- / (基本 JSON 响应)测量基线请求处理性能。
- /compute (CPU 密集型工作负载):模拟计算负载。
- /delayed (I/O 绑定工作负载):通过人为延迟模拟异步任务。
测试环境:
- CPU: Star Labs StarLite Mk IV
- 服务器: Uvicorn(4 名工作人员)
- 基准测试工具: wrk
- 测试时长:每个端点 30 秒
- 连接数: 1000 个并发连接
- 主题: 4
基准测试结果
总体表现摘要
框架 / 请求数/秒 延迟(毫秒) 传输/秒 /compute 请求数/秒 延迟(毫秒) 传输/秒 /delayed 请求数/秒 延迟(毫秒) 传输/秒 |
结论:
- Starlette 的整体表现最佳——在所有测试中速度最快,尤其在异步工作负载方面表现出色。
- MicroPie 与 Starlette 非常接近——具有强大的 CPU 和异步性能,使其成为一种出色的轻量级替代品。
- FastAPI 在计算负载下会变慢——性能受到验证开销的影响。
- Quart 是最慢的——在所有场景中延迟最高,每秒请求数最低。
- Litestar 在整体性能上落后——与 MicroPie 和 Starlette 相比,延迟更高、吞吐量更低。
- Litestar 并未针对高并发进行很好的优化——与其他 ASGI 框架相比,计算密集型任务和异步任务的速度都很慢。
测试代码:
MicroPie (micro.py)
import orjson, asyncio |
FastAPI (fast.py)
from fastapi import FastAPI |
Starlette (star.py)
from starlette.applications import Starlette |
Quart (qurt.py)
from quart import Quart, Response |
性能测试方法Benchmarking
wrk -t4 -c1000 -d30s http://127.0.0.1:8000/
wrk -t4 -c1000 -d30s http://127.0.0.1:8000/compute
wrk -t4 -c1000 -d30s http://127.0.0.1:8000/delayed
结论
- Starlette 是高性能应用程序的最佳选择。
- MicroPie 以更简单的架构提供近乎相同的性能。
- FastAPI 非常适合 API 开发,但却存在验证开销的问题。
- Quart 并不适合高并发工作负载。
- Litestar 还有改进空间——其较高的延迟和较低的请求率表明它可能不是高度并发应用程序的最佳选择