什么是 Uvicorn?
- ASGI 服务器:用于运行基于 ASGI 的异步 Python Web 框架(如 FastAPI、Starlette、Django 3.0+ 的异步版本)。
- 名称含义:'UVicorn'源自'Uv'(Ultra-Violet,紫外线)和'Corn'(独角兽),寓意'极快的异步服务器'。
- 底层依赖:基于
uvloop(高性能异步事件循环,替代 asyncio)和httptools(HTTP 解析库),速度极快。
核心特性
- 高性能:得益于
uvloop,性能接近 Go/Node.js 的异步服务器。 - 轻量级:代码简洁,专注 ASGI 协议实现。
- 支持 HTTP/1.1 和 WebSockets:完整支持异步 Web 通信。
- 自动重载:开发时可监听文件变动自动重启(
--reload参数)。 - 兼容同步/异步应用:可运行传统 WSGI 应用(需搭配
uvicorn[standard]和asgiref适配器)。
安装与使用
安装
pip install uvicorn[standard]
# 包含额外依赖(如 uvloop、httptools)
# 或最小安装:
pip install uvicorn
基本使用
# 运行 FastAPI/Starlette 等 ASGI 应用(假设应用在 main.py 的 app 对象)
uvicorn main:app --host 0.0.0.0 --port 8000
# 开发时启用自动重载
uvicorn main:app --reload
# 调整 worker 数量(生产环境通常配合多个进程)
uvicorn main:app --workers 4
与常见框架的配合
- FastAPI:官方推荐的生产服务器(常与 Gunicorn 搭配管理多进程)。
- Starlette:Uvicorn 由 Starlette 作者开发,天然适配。
- Django:Django 3.0+ 支持 ASGI,可通过
uvicorn django_project.asgi:application运行。 - 其他 ASGI 框架:Quart、Sanic(也自带服务器)等。
生产部署建议
Uvicorn 本身是单进程服务器,生产环境需搭配进程管理器提升稳定性与并发:
- Supervisor/Systemd:管理 Uvicorn 进程。
- Docker:容器化部署。
Gunicorn + Uvicorn Worker(常见组合):
gunicorn main:app -k uvicorn.workers.UvicornWorker --workers 4
性能对比
- 在异步 I/O 密集型场景(如高并发 API、WebSocket),Uvicorn 性能显著高于传统 WSGI 服务器(如 Gunicorn + sync worker)。

