Uvicorn 是一个用于 Python 的 ASGI(异步服务器网关接口)Web 服务器,专门用来运行异步 Web 应用程序,比如用 FastAPI、Starlette 等框架写的项目。
简单来说,它的作用是 "桥梁":Python 异步框架本身不能直接监听网络请求,Uvicorn 负责接收 HTTP 请求、解析协议、转发给框架处理,再把响应返回给客户端。
核心特点
- 高性能 :基于
uvloop和httptools,支持高并发和长连接(如 WebSocket)。 - 开发友好 :支持代码热重载(
--reload)、彩色日志、环境变量配置。 - 协议支持:HTTP/1.1 和 WebSocket。
- 轻量级 :单进程异步模型,也可通过
--workers启动多进程。
典型使用场景
- FastAPI 官方推荐服务器:FastAPI 是异步框架,Uvicorn 是其默认运行时。
- 开发环境 :用
uvicorn main:app --reload启动,修改代码自动重启。 - 生产部署:常与 Gunicorn 结合(Gunicorn 管理进程,Uvicorn 处理异步请求)。
安装方式
bash
# 基础安装(仅核心功能)
pip install uvicorn
# 完整安装(推荐,包含 uvloop、httptools、websockets 等)
pip install "uvicorn[standard]"
注意:完整安装能提升性能并支持 WebSocket 和热重载。
快速启动示例
假设有一个 FastAPI 应用 main.py:
python
from fastapi import FastAPI
app = FastAPI()
@app.get("/")
async def root():
return {"message": "Hello World"}
启动命令:
bash
uvicorn main:app --reload --host 0.0.0.0 --port 8000
main:app:模块名和应用实例名。--reload:开发模式自动重载。--host/--port:指定监听地址和端口。
与 Gunicorn 的区别
| 特性 | Uvicorn (ASGI) | Gunicorn (WSGI) |
|---|---|---|
| 协议 | 异步(支持 FastAPI、Starlette) | 同步(支持 Flask、Django) |
| 并发模型 | 单进程异步事件循环 | 多进程(预分叉) |
| 适用场景 | 高并发、I/O 密集型、长连接(WebSocket) | CPU 密集型、传统同步应用 |
| 生产部署 | 常与 Gunicorn 结合(Gunicorn 管理进程) | 独立使用或搭配 Nginx |
常见用途总结
- 开发 FastAPI/Starlette 项目:本地调试、热重载。
- 部署异步 Web 服务:直接运行或搭配 Gunicorn。
- 支持 WebSocket 实时通信:如聊天室、实时数据推送。
- 云函数/Serverless 部署:适配 AWS Lambda、Google Cloud Functions 等。
如果你正在学习 FastAPI 或异步 Web 开发,Uvicorn 是必不可少的工具。