最佳答案
我刚刚发现了配置选项 CELERYD_PREFETCH_MULTIPLIER
(医生)。默认值是4,但(我相信)我希望关闭或尽可能低的预取。我现在把它设为1,这已经足够接近我要找的了,但是还有一些事情我不明白:
为什么这个预取是个好主意?除非消息队列和工作服务器之间存在大量延迟(在我的例子中,它们当前运行在同一个主机上,最坏的情况可能最终运行在同一个数据中心的不同主机上) ,否则我看不出其中的原因。文档只提到了缺点,但没有解释优点是什么。
许多人似乎将这个值设置为0,期望能够以这种方式关闭预取(在我看来这是一个合理的假设)。但是,0意味着无限制的预取。为什么会有人想要无限制的预取,这不是完全消除了您最初引入任务队列所要求的并发性/异步性吗?
为什么不能关闭预取?在大多数情况下,关闭它对于性能来说可能不是一个好主意,但是否存在不可能做到这一点的技术原因?还是只是没有实施?
有时,此选项连接到 CELERY_ACKS_LATE
。比如说。罗杰 · 胡写道“[ ... ]通常[用户]真正想要的是让一个工作者只保留子进程中的任务数量。但是,如果不启用延迟确认(... ...) ,这是不可能的。”我不明白这两个选项是如何联系在一起的,为什么没有另一个选项就不可能。另一个提到的连接可以找到 给你。有人能解释一下为什么这两个选项是相关的吗?