我对CELERYD_CONCURRENCY和CELERYD_PREFETCH_MULTIPLIER有疑问
因为我的英语不太懂官方网站的描述,
我想确定一下
我设定了CELERYD_CONCURRENCY=40,我想它会用40个工人来做事情
但我通常看到INFO/MainProcess,很少看到INFO/Worker-n
是因为任务快,所以不需要分配给工人吗??
下面是一个任务架构:
我有一个period_task是芹菜period_task,mail_it是普通芹菜任务
@shared_task
def period_task():
do_something()
....
for mail in mail_list:
mail_it.delay(mail)

第二个问题是CELERYD_PREFETCH_MULTIPLIER,默认值是4
这是否意味着每个员工可以一次从队列中得到4个任务?所以我有40名工人,我可以得到40*4项任务?
发布于 2016-01-18 02:24:41
我的理解是:
CELERYD_CONCURRENCY:这是给定工作人员将拥有的线程/GREENTHREADS的数量。芹菜称这些为“过程”。这是单个员工可以并行执行的任务数。我相信芹菜在内部创造了这个数字加一个,另外一个是实际管理/分配给其他人的(在你的例子中,有40个!)根据我的经验,您可能不需要/不需要40 (接近每CPU 1或2),但是您的里程可能会有所不同。
CELERYD_PREFETCH_MULTIPLIER: Prefetch是根据文档为每个“进程”保留多少任务。它有点像一个迷你队列,只用于特定的线程。这实际上意味着你的一名刚开始工作的人可能会“保留”40 *4项任务。请记住,这些保留的任务不能被“窃取”,也不能发送给其他工作人员或线程,因此如果这些任务运行时间较长,您可能希望禁用此功能,以使速度更快的站点能够清除速度较慢的任务。
如果在当前的设置中这一点不清楚,我可能建议在任务中添加task (),以便能够观察它。
https://stackoverflow.com/questions/34845715
复制相似问题