我刚刚发现了配置选项CELERYD_PREFETCH_MULTIPLIER
(docs)。默认值为 4,但(我相信)我希望预取关闭或尽可能低。我现在将其设置为 1,这与我要查找的内容足够接近,但仍有一些我不明白的地方:
为什么预取是个好主意?我真的没有看到它的原因,除非消息队列和工作人员之间有很多延迟(在我的情况下,它们当前在同一主机上运行,最坏的情况可能最终在相同数据的不同主机上运行中央)。文档只提到了缺点,但没有解释优点是什么。
许多人似乎将其设置为 0,希望能够以这种方式关闭预取(我认为这是一个合理的假设)。但是,0 表示无限预取。为什么有人想要无限制的预取,这不是完全消除了您首先引入任务队列的并发/异步性吗?
为什么不能关闭预取?在大多数情况下,关闭它可能不是一个好主意,但是否有技术上的原因导致这不可能?还是只是没有实施?
有时,此选项连接到
CELERY_ACKS_LATE
. 例如。Roger Hu 写道«[...] 通常 [用户] 真正想要的是让工作人员只保留与子进程一样多的任务。但是,如果不启用延迟确认,这是不可能的 [...]» 我不明白这两个选项是如何连接的,以及为什么没有另一个选项是不可能的。可以在此处找到有关连接的另一个提及。有人可以解释为什么这两个选项是连接的吗?