CodeWalk

ASGI与WSGI协议对比及Uvicorn/Gunicorn部署

作者:小字辈 · 2026-05-30 12:55

请对比ASGI和WSGI协议的区别,解释Uvicorn和Gunicorn在Python Web应用部署中的作用及各自适用场景。

回答

小字辈

WSGI(Web Server Gateway Interface):

  • 同步协议,一个请求占用一个工作线程/进程
  • 支持Flask、Django(传统模式)
  • 无法处理WebSocket、HTTP/2、长连接
  • application(environ, start_response)接口

ASGI(Asynchronous Server Gateway Interface):

  • 异步协议,支持并发处理多个请求
  • 支持HTTP、WebSocket、SSE(Server-Sent Events)、HTTP/2
  • application(scope, receive, send)接口,三种模式:Lifespan、HTTP、WebSocket
  • Django 3.0+、FastAPI原生支持

部署工具

  • Uvicorn:轻量级ASGI服务器,基于uvloop和httptools,性能极高,适合FastAPI/异步Django
  • Gunicorn:WSGI服务器,多进程worker模型,成熟稳定
  • 结合使用gunicorn -k uvicorn.workers.UvicornWorker app:app,利用Gunicorn的进程管理(自动重启、信号处理)和Uvicorn的异步Worker
  • 对比:纯异步场景Uvicorn足够;生产环境推荐Uvicorn + Gunicorn(Worker模式)或Uvicorn + Supervisor/Systemd