Gunicorn和Uvicorn

发布时间 2023-08-07 16:08:50作者: bhxuwei

WSGI:Web服务器网关接口(Python Web Server Gateway Interface,缩写为WSGI)是为Python语言定义的Web服务器和Web应用程序或框架之间的一种简单而通用的接口。

Gunicorn 是一个使用 WSGI 标准的应用服务器。

Flask 和 DJango可以直接使用 Gunicorn 运行,但是FastAPI不能直接使用 Gunicorn,因为 FastAPI 使用最新的ASGI 标准。

Gunicorn 可以作为进程管理器使用,并且可以设定进程的类型,Uvicorn 可以作为 Gunicorn的进程类型。

使用这种组合,Gunicorn 将充当进程管理器,监听端口和IP。它会将接收到的数据传输到运行 Uvicorn 类的工作进程,然后,Uvicorn 将数据传输给 FastAPI。

gunicorn main:app --workers 2 --worker-class uvicorn.workers.UvicornWorker --bind 0.0.0.0:8000 

Gunicorn 可以管理失效的进程,如果进程死掉会重启一个新的进程以维持工作进程的数量。

uvicorn 在单进程上使用异步协程是有优势的、但是如果接口方法是同步的则走的多进程模式、也就是 workers 的数量、 这个时候 uvicorn 不如 gunicorn、性能上会有些限制。

uvicorn main:app --host 0.0.0.0 --port 8000 --workers 4