我目前正在用Django开发一个服务,它使用一个缓慢的外部API (大约需要10秒才能得到响应),这意味着到我的服务器的连接保持打开,等待外部API响应,并占用工作人员的时间/资源。
我知道我可以使用gunicorn的线程或gevent工作线程来添加并发性,但似乎无法掌握在gevent工作线程和uvicorn (或任何其他服务器)的asgi接口中使用gunicorn的确切区别。
使用其中一个的标准是什么?
Django仍然不完全支持async/await视图。如果我只使用gevent worker会不会更好?
发布于 2020-10-23 11:15:20
Gunicorn有一个预分叉工作者模型
pre-fork worker模型基本上意味着主节点创建fork来处理每个请求。fork是一个完全独立的*nix进程(Source)。
uvloop Uvicorn是一台运行的ASGI服务器
Python async需要一个事件循环才能使用它的异步特性。uvloop是asyncio loop的替代方案。因此,如果你的代码中有异步调用,你可以在内部使用uvloop,或者使用uvicorn作为你的ASGI服务器。注意:您仍然只有一个事件循环。您可以选择使用gunicorn和uvicorn来拥有多个工作进程,并使用uvloop。
在您的django应用程序中,在内部使用uvloop (如果您选择这样做)并使用gunicorn作为您的ASGI是很有意义的。
https://stackoverflow.com/questions/62543342
复制相似问题