Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/290.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python Celery并发设置:CELERYD_并发和CELERYD_预取_乘数_Python_Celery - Fatal编程技术网

Python Celery并发设置:CELERYD_并发和CELERYD_预取_乘数

Python Celery并发设置:CELERYD_并发和CELERYD_预取_乘数,python,celery,Python,Celery,我对CELERYD\u并发性和CELERYD\u预取\u乘数 因为我的英语不太好,无法理解官方网站的描述, 我想确认一下 我将CELERYD\u并发性设置为40 我认为这将需要40名工人来做事情 但是我通常看到INFO/MainProcess,很少看到INFO/Worker-n 是因为任务很快,所以不必分配给工人吗 这是一个任务体系结构: 我有一个period\u任务是芹菜period\u任务,而mail\u它是普通芹菜任务 @shared_task def period_task():

我对
CELERYD\u并发性
CELERYD\u预取\u乘数

因为我的英语不太好,无法理解官方网站的描述,
我想确认一下

我将CELERYD\u并发性设置为40 我认为这将需要40名工人来做事情
但是我通常看到
INFO/MainProcess
,很少看到
INFO/Worker-n

是因为任务很快,所以不必分配给工人吗

这是一个任务体系结构:
我有一个
period\u任务
是芹菜period\u任务,而
mail\u它
是普通芹菜任务

@shared_task
def period_task():
    do_something()
    ....
    for mail in mail_list:
        mail_it.delay(mail)

第二个问题是
CELERYD\u PREFETCH\u乘数
,默认值为4
这是否意味着每个工人一次可以从队列中获得4个任务???所以我有40名员工,我可以完成40*4任务???

我的理解:

CELERYD_并发: 这是给定工作线程的线程数/绿色线程数。芹菜称之为“过程”。这是单个工人可以并行执行的任务数。我相信芹菜在内部创造了这个数字加1,另外的1是为了实际管理/分配给其他人(在你的例子中,是40人!)。根据我的经验,您可能不需要/想要40(接近每个CPU 1或2),但您的里程数可能会有所不同

CELERYD_预取_乘法器: 预回迁是根据文档,每个“进程”保留的任务数。这有点像是针对特定线程的迷你队列。这确实意味着您的一开始工作人员可能会“保留”40*4个任务。请记住,这些保留任务不能被“窃取”或发送给另一个工作线程或线程,因此,如果它们长时间运行,您可能希望禁用此功能,以允许更快的工作站拾取较慢工作站的空闲任务


如果您当前的设置不清楚这一点,我建议您在任务中添加一个sleep(),以便能够观察到它。

非常感谢。什么是
但是你的里程可能不同
意味着什么?你的里程可能不同(你可能会在互联网上看到它缩短为“YMMV”)意味着你的体验可能与我的不同。我在这里这么说是因为我使用较少的线程和长时间运行的任务,而您使用的是许多线程和短任务,因此我对芹菜的体验可能与您的非常不同。我只是没有确切的经验来告诉你40个线程对你的需求来说是好是坏。很抱歉使用这个短语,因为我现在意识到,如果英语是第二语言,这是一个有点奇怪的句子/短语。非常感谢。我明白了