Celery 并发设置:CELERYD_CONCURRENCY 和 CELERYD_PREFETCH_MULTIPLIER
Celery concurrency settings : CELERYD_CONCURRENCY and CELERYD_PREFETCH_MULTIPLIER
我对 CELERYD_CONCURRENCY
和 CELERYD_PREFETCH_MULTIPLIER
有疑问
因为我的英文不太懂官方网站的描述,
我想确认一下
我设置CELERYD_CONCURRENCY=40
我想它会用40个worker来做事情
但是我经常看到INFO/MainProcess
,很少看到INFO/Worker-n
是不是因为任务快,所以不用分配给worker??
这是一个任务架构:
我有一个 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个任务????
我的理解:
CELERYD_CONCURRENCY:
这是给定工人将拥有的 THREADS/GREENTHREADS 数量。 Celery 调用这些 "processes"。这是单个工作人员可以并行执行的任务数。我相信 Celery 在内部创建了这个 numbe PLUS ONE,并且额外的 1 实际上是 managing/assigning 给其他人(在你的例子中,有 40 个!)。根据我的经验,您可能不会 need/want 40(每个 CPU 接近 1 或 2),但您的里程数可能会有所不同。
CELERYD_PREFETCH_MULTIPLIER:
根据文档,预取是每个 "process" 预留的任务数。它有点像 mini-queue 只是针对那个特定的线程。这确实意味着您的一名新手员工可能 'reserve' 40 * 4 项任务要做。请记住,这些保留的任务不能 "stolen" 或发送给另一个工作人员或线程,因此如果它们很长 运行 您可能希望禁用此功能以允许更快的站点接管较慢的站点.
如果您当前的设置中不清楚这一点,我可能建议您在任务中添加一个 sleep() 以便能够观察到它。
我对 CELERYD_CONCURRENCY
和 CELERYD_PREFETCH_MULTIPLIER
有疑问
因为我的英文不太懂官方网站的描述,
我想确认一下
我设置CELERYD_CONCURRENCY=40
我想它会用40个worker来做事情
但是我经常看到INFO/MainProcess
,很少看到INFO/Worker-n
是不是因为任务快,所以不用分配给worker??
这是一个任务架构:
我有一个 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个任务????
我的理解:
CELERYD_CONCURRENCY: 这是给定工人将拥有的 THREADS/GREENTHREADS 数量。 Celery 调用这些 "processes"。这是单个工作人员可以并行执行的任务数。我相信 Celery 在内部创建了这个 numbe PLUS ONE,并且额外的 1 实际上是 managing/assigning 给其他人(在你的例子中,有 40 个!)。根据我的经验,您可能不会 need/want 40(每个 CPU 接近 1 或 2),但您的里程数可能会有所不同。
CELERYD_PREFETCH_MULTIPLIER: 根据文档,预取是每个 "process" 预留的任务数。它有点像 mini-queue 只是针对那个特定的线程。这确实意味着您的一名新手员工可能 'reserve' 40 * 4 项任务要做。请记住,这些保留的任务不能 "stolen" 或发送给另一个工作人员或线程,因此如果它们很长 运行 您可能希望禁用此功能以允许更快的站点接管较慢的站点.
如果您当前的设置中不清楚这一点,我可能建议您在任务中添加一个 sleep() 以便能够观察到它。