【问题标题】:Gunicorn gevent workers vs Uvicorn ASGIGunicorn gevent workers vs Uvicorn ASGI
【发布时间】:2020-10-14 00:30:52
【问题描述】:

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

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

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

Django 仍然不完全支持异步/等待视图。如果我只坚持 gevent 工人会更好吗?

【问题讨论】:

    标签: python django gunicorn uvicorn asgi


    【解决方案1】:

    Gunicorn 有一个 pre-fork worker 模型

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

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

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

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2021-04-02
      • 2012-11-13
      • 2022-08-12
      • 2021-11-23
      • 2021-08-17
      • 2020-12-07
      • 2022-06-15
      • 1970-01-01
      相关资源
      最近更新 更多