在Celery中启动多个进程

时间:2017-02-27 15:09:55

标签: python django celery django-celery

我在为Django配置Celery时遇到问题。

这就是我开始django-celery的方式:

python manage.py celery worker --autoscale=10,2

任务示例:

@task
def test(i):
    print "ITERATION {} START".format(i)
    time.sleep(10)
    print "ITERATION {} END".format(i)
    return True

我将此任务称为:

for i in range(10):
    test.delay(i)

我期望发生的是,如果我将10个任务发送到队列,则应该打开10个进程 - 每个任务一个。

实际发生的是进程的随机数量,通常是4和在这4项任务完成后,另外3次开始,完成后,另外3次开始。甚至对于需要更长时间才能完成的任务,例如, 2分钟。

有人可以解释这种行为吗?如果自动缩放上限允许,我该如何立即启动所有任务?

此外,虽然自动缩放的下限为2,但启动服务器时,会运行3个进程。那是为什么?

平台:OpenWRT,双核处理器,2GB RAM。

1 个答案:

答案 0 :(得分:0)

Celery默认情况下会为每个核心创建一个worker,所以我假设你在一个拥有4个核心的机器上运行。您可以使用标记--concurrency进行配置,请参阅documentation以获取更多详细信息。

之后你说3个进程开始然后是2个,依此类推,任务只会在另一个进程完成时启动,并且由于预取策略,有时也会延迟。您可以查看this thread了解详情。

Celery启动主进程和X工作程序 - 主进程管理工作程序,在需要时重新启动它们并将任务分派给工作程序。因此,如果您有2名工人 - 您将有3个流程。

相关问题