Uvicorn:Python 的 ASGI Web 服务器
Uvicorn:Python 的 ASGI Web 服务器
Python 异步 Web 服务器领域,Uvicorn 收获了 10,723 个 Star:


Uvicorn 是 Python 的 ASGI Web 服务器实现。ASGI(Asynchronous Server Gateway Interface)是为异步框架设计的底层服务器与应用接口规范。在此之前,Python 缺少这样的标准接口,WSGI 仅支持同步调用。这意味着长连接场景,如长轮询 HTTP 或 WebSocket,在 WSGI 下难以处理。ASGI 的出现填补了这一空白,使得跨异步框架的通用工具集得以建立。
Uvicorn 支持 HTTP/1.1 和 WebSocket 协议。
安装
Uvicorn 提供两种安装方式。基础安装使用 pip:
pip install uvicorn
这会安装最小依赖的纯 Python 版本,适合对性能要求不高的场景。
如果需要完整功能,则安装:
pip install 'uvicorn[standard]'
该版本会安装额外的 Cython 依赖。其中 uvloop 会替代默认的 asyncio 事件循环,httptools 负责 HTTP 协议解析。可选组件包括 websockets 协议处理、watchfiles 开发热重载、colorama Windows 彩色日志、python-dotenv 环境变量读取和 PyYAML 日志配置支持。
快速上手
创建一个简单的 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
即可在本地启动服务。
为什么选择 ASGI
ASGI 与 WSGI 的核心区别在于并发模型。WSGI 是同步的单次调用,接收请求并返回响应。这种模式无法有效处理长连接。异步模型允许轻量级后台任务,在处理慢速网络 I/O 时也能保持响应能力。
其他 ASGI 服务器
ASGI 协议将服务器实现与应用框架解耦,催生了多个服务器实现:
Daphne 是最早的 ASGI 服务器,最初为 Django Channels 开发,已广泛用于生产环境,支持 HTTP/1.1、HTTP/2 和 WebSocket。
Hypercorn 最初属于 Quart 框架,后独立为单独的 ASGI 服务器,支持 HTTP/1.1、HTTP/2 和 WebSocket,也可使用 trio 异步框架替代 asyncio。
Mangum 用于将 ASGI 应用部署到 AWS Lambda 和 API Gateway。
Granian 是用 Rust 编写的 ASGI 兼容 HTTP 服务器,支持 HTTP/2、TLS 和 WebSocket。
Uvicorn 采用 BSD 许可证,是 FastAPI、Starlette 等框架的默认服务器选择。
2、TLS 和 WebSocket。
Uvicorn 采用 BSD 许可证,是 FastAPI、Starlette 等框架的默认服务器选择。
openEuler 是由开放原子开源基金会孵化的全场景开源操作系统项目,面向数字基础设施四大核心场景(服务器、云计算、边缘计算、嵌入式),全面支持 ARM、x86、RISC-V、loongArch、PowerPC、SW-64 等多样性计算架构
更多推荐
所有评论(0)