独角兽事件工人 vs Uvicorn ASGI



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

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

使用一个而不是另一个的标准是什么?

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

Gunicorn 有一个预分叉工人模型

预分叉工作线程模型基本上意味着主节点创建处理每个请求的分叉。分叉是一个完全独立的 *nix 进程(来源(。

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

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

在你的 django 应用程序中,在内部使用uvloop(如果你愿意的话(并使用gunicorn作为你的 ASGI 是有意义的。

最新更新