Gunicorn gevent 工人 vs Uvicorn ASGI

imr*_*mos 27 python django gunicorn asgi uvicorn

我目前正在 Django 中开发一个服务,它使用一个缓慢的外部 API(需要大约 10 秒才能获得响应),这意味着与我的服务器的连接保持打开状态,等待外部 API 响应,并占用工作时间/资源。

我知道我可以使用 gunicorn 的线程或 gevent 工作人员来添加并发性,但似乎无法掌握将 gunicorn 与 gevent 工作人员一起使用和将 uvicorn(或任何其他服务器)与 asgi 接口一起使用之间的确切区别。

使用其中一种的标准是什么?

Django 仍然不完全支持 async/await 视图。如果我坚持使用 gevent 工人会更好吗?

clm*_*mno 10

Gunicorn 有一个 pre-fork 工人模型

一个 pre-fork 工作模型基本上意味着一个 master 创建处理每个请求的 fork。fork 是一个完全独立的 *nix 进程(Source)。

Uvicorn 是一个运行 uvloop 的 ASGI 服务器

Python async 需要一个事件循环才能使用它的异步功能。并且uvloopasyncio loop的替代品。因此,如果您的代码中有异步调用,您可以在uvloop内部使用或uvicorn用作您的 ASGI 服务器。注意:您仍然只有一个事件循环。您可以选择使用gunicornuvicorn拥有多个工作人员并使用 uvloop。

在您的 django 应用程序中,在uvloop内部使用(如果您选择)并gunicorn用作您的 ASGI是有意义的。