Uvicorn - 一个将改变你对 Python 开发认知的异步 Web 服务器
10,804 星标

为什么开发者会爱上 Uvicorn
还记得 WSGI 是 Python Web 唯一标准的时代吗?异步请求、WebSocket 和长连接都被排除在外。ASGI(异步服务器网关接口)解决了这个问题,而 Uvicorn 成为其中最流行的实现之一。
这个以独角兽为标志的轻量级服务器支持 HTTP/1.1 和 WebSocket,运行在 asyncio 之上。但最重要的是——它已成为 FastAPI、Starlette 和 Quart 等现代 Python 框架的事实标准。
开发者会欣赏的关键特性
- 极快的速度 — 归功于 uvloop 和 httptools(使用 'standard' 选项安装时)
- 易于集成 — 可与任何 ASGI 兼容框架配合使用
- 生产就绪 — 在负载下性能稳定
- 灵活配置 — 从最小化设置到扩展工具包
- 内置开发模式,支持自动重载
快速入门
你可以通过两种方式安装 Uvicorn:
# Минимальная установка
pip install uvicorn
# С оптимизациями для production
pip install 'uvicorn[standard]'
简单 ASGI 应用示例(保存为 example.py):
async def app(scope, receive, send):
assert scope['type'] == 'http'
await send({
'type': 'http.response.start',
'status': 200,
'headers': [
(b'content-type', b'text/plain'),
],
})
await send({
'type': 'http.response.body',
'body': b'Hello, world!',
})
启动服务器:
uvicorn example:app
Uvicorn 如何超越 WSGI 服务器
传统的 WSGI 服务器(如 Gunicorn)非常适合同步应用,但在以下场景中表现吃力:
- 长连接(WebSocket、长轮询)
- 异步 I/O 操作
- 后台任务
Uvicorn 在这些场景中表现出色,使 Python 在现代 Web 技术世界中具有竞争力。
替代方案及何时选择它们
虽然 Uvicorn 是一个出色的选择,但 ASGI 生态系统中还有其他选项:
- Daphne — ASGI 先驱,支持 HTTP/2
- Hypercorn — 支持 trio 的替代方案
- Granian — 专注于性能的 Rust 实现
选择取决于你的需求:如果 HTTP/2 支持对你至关重要——看看 Daphne;如果追求极致速度——你可能想尝试 Granian。
来自一线:我们在哪里使用 Uvicorn
在我们的 FastAPI 后端中,Uvicorn 已成为不可或缺的工具:
- 开发环境 — 配合自动重载和详细日志
- 生产环境 — 作为部署的一部分,使用 Gunicorn 作为进程管理器
我们特别欣赏的是配置的简洁性——只需几个命令行参数就能微调性能。
结论:值得一试吗?
如果你:
- 使用 FastAPI、Starlette 或其他 ASGI 框架
- 需要 WebSocket 支持
- 想充分发挥异步 Python 的优势
— Uvicorn 将是一个绝佳的选择。它是一个经过验证的解决方案,拥有出色的文档和活跃的社区。
对于传统的 WSGI 项目,它可能不太适合,但对于任何新项目——我强烈建议你尝试一下。就我个人而言,Uvicorn 之后,再回到同步 Web 开发已经不再吸引我了。
相关项目