Uvicorn 是一个基于 ASGI(Asynchronous Server Gateway Interface) 的超快、轻量级 Web 服务器,专为 Python 异步框架(如 FastAPI 和 Starlette)设计。它基于 uvloophttptools,提供 高并发低延迟 的性能。

核心特性

超快性能:使用 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 进程,理由:

  1. 更好的进程管理:Gunicorn 负责 worker 进程的生命周期管理,避免了 Uvicorn 进程崩溃导致整个服务停掉。

  2. 多 worker 支持:可以合理利用多核 CPU 资源,提高并发能力。

  3. 更好的负载均衡: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 是首选服务器! 💡