Uvicorn 是一个基于 ASGI(Asynchronous Server Gateway Interface) 的超快、轻量级 Web 服务器,专为 Python 异步框架(如 FastAPI 和 Starlette)设计。它基于 uvloop 和 httptools,提供 高并发 和 低延迟 的性能。
核心特性
✅ 超快性能:使用 uvloop 提供高效的事件循环,性能比传统 WSGI 服务器(如 Gunicorn)更强。
✅ 异步支持:天然支持 async/await,适用于 FastAPI、Starlette 等异步框架。
✅ WebSocket & HTTP/2:支持 WebSocket 连接和 HTTP/2 协议。
✅ 自动重载:开发环境下支持 –reload 自动重启,提升开发效率。
✅ 多进程支持:可与 Gunicorn 结合运行,提升并发能力。
Uvicorn 安装
pip install uvicorn
Uvicorn 运行 FastAPI
先安装 fastapi
pip install fastapi
创建一个简单的 FastAPI 应用 main.py:
from fastapi import FastAPI
app = FastAPI()
@app.get("/")
async def read_root():
return {"message": "Hello, Uvicorn!"}
使用 Uvicorn 启动:
uvicorn main:app --host 0.0.0.0 --port 8000 --reload
参数解释:
• main:app 👉 main.py 文件中的 app 对象
• –host 0.0.0.0 👉 允许外部访问
• –port 8000 👉 监听 8000 端口
• –reload 👉 开启 自动重载(开发环境)
生产环境部署
多进程模式
Uvicorn 默认是单进程单线程,如果要提高性能,可以结合 Gunicorn 运行:
pip install gunicorn
gunicorn -w 4 -k uvicorn.workers.UvicornWorker main:app
• -w 4 👉 启动 4 个 worker 进程
• -k uvicorn.workers.UvicornWorker 👉 使用 Uvicorn 的 ASGI worker
使用 Gunicorn 作为主进程管理多个 Uvicorn worker 进程,理由:
-
更好的进程管理:Gunicorn 负责 worker 进程的生命周期管理,避免了 Uvicorn 进程崩溃导致整个服务停掉。
-
多 worker 支持:可以合理利用多核 CPU 资源,提高并发能力。
-
更好的负载均衡:Gunicorn 负责将请求分发给不同的 worker,提高吞吐量。
守护进程
创建 Systemd
服务 /etc/systemd/system/uvicorn.service
:
[Unit]
Description=Uvicorn FastAPI Service
After=network.target
[Service]
User=ubuntu
Group=ubuntu
WorkingDirectory=/home/ubuntu/app
ExecStart=/usr/bin/env uvicorn main:app --host 0.0.0.0 --port 8000
Restart=always
[Install]
WantedBy=multi-user.target
启动服务:
sudo systemctl start uvicorn
sudo systemctl enable uvicorn
Uvicorn 高级特性
运行 Python 模块
uvicorn myapp:app
如果 myapp
是一个 Python 包:
uvicorn myapp.main:app
配置日志
uvicorn main:app --log-level debug
Uvicorn vs Gunicorn vs Daphne
服务器 | 接口 | 适用场景 | 异步支持 | WebSocket |
---|---|---|---|---|
Uvicorn | ASGI | FastAPI, Starlette | ✅ 是 | ✅ 支持 |
Gunicorn | WSGI | Flask, Django | ❌ 否 | ❌ 不支持 |
Daphne | ASGI | Django Channels | ✅ 是 | ✅ 支持 |
• Uvicorn 适用于 异步应用(FastAPI, Starlette),性能最佳。
• Gunicorn 适用于 传统 WSGI(Flask, Django),但可结合 Uvicorn 使用。
• Daphne 适用于 Django Channels(WebSocket, Chat 应用)。
总结
🚀 Uvicorn 是 FastAPI 的最佳搭档,提供高性能、低延迟的 ASGI 服务器。
🔥 在生产环境中,可以结合 Gunicorn 提供多进程支持。
🌍 支持 WebSockets、HTTP/2,并可运行在 HTTPS 之上。
如果你在用 FastAPI,Uvicorn 是首选服务器! 💡