Gunicorn 通风口工人 vs Uvicorn ASGI

Gunicorn gevent workers vs Uvicorn ASGI

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

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

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

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

Gunicorn 有一个 pre-fork 工人模型

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

Uvicorn 是一个 ASGI 服务器 运行uvloop

Python async 需要一个事件循环才能使用它的异步功能。和 uvloop is an alternative to the asyncio loop。因此,如果您的代码中有异步调用,您可以在内部使用 uvloop 或使用 uvicorn 作为您的 ASGI 服务器。注意:您仍然只有一个事件循环。您可以选择使用 gunicornuvicorn 来拥有多个 worker 并使用 uvloop。

在您的 Django 应用程序中,在内部使用 uvloop 并使用 gunicorn 作为您的 ASGI 是有意义的。