【发布时间】:2021-12-27 06:49:55
【问题描述】:
异步
对于输入/输出(IO)绑定,我们需要使用异步代码,而 django 默认不是异步的,但是我们可以通过 gevent 工作程序和 monkey patching:
gunicorn --worker-class=gevent --worker-connections=1000 --workers=3 main:app
2014 年的 Gunicorn 更新日志https://docs.gunicorn.org/en/stable/2014-news.html?highlight=monkey#gevent-worker:
修复:猴子补丁现在在工作人员中完成
- 我是否仍需要对我的应用程序进行猴子修补,或者它是由工作人员默认完成的?
- gevent 如何为我的 django 代码实现异步功能?
线程
如果我们的 CPU 受限,我们需要使用带有线程的 gthread 工作者:
gunicorn --workers=5 --threads=2 --worker-class=gthread main:app
- 如果我们将此配置用于 i/o 绑定,它是否有效?当一个线程因为 i/o 等待时,另一个线程能工作吗?
- 由于 i/o 中的等待时间,我看到了 (3) 中的要点(如果我是对的),但如果这是一个 CPU 限制,那么在我们的情况下,第二个线程将如何帮助我们,或者只会如果核心没有被一个线程完全加载并且还有空间让另一个线程运行,是否有帮助?
- (3) 和 (4) 是否因为 GIL 而无用?
例如,4 个人使用 1 个工作线程和 4 个线程向服务器发送请求。 GIL 确保只有 1 个线程有效。第一个人开始处理线程 1 和其他 3 正在等待?那么线程是干什么用的呢?
【问题讨论】:
标签: python django multithreading asynchronous gunicorn