使用 Celery 运行多个 worker

SrC*_*SrC 16 python celery

我需要从 Rabbitmq 读取并在单个系统中使用 Celery 并行执行任务。

[2014-12-30 15:54:22,374: INFO/Worker-1] ...   
[2014-12-30 15:54:23,401: INFO/Worker-1] ...
[2014-12-30 15:54:30,878: INFO/Worker-1] ...
[2014-12-30 15:54:32,209: INFO/Worker-1] ...
[2014-12-30 15:54:33,255: INFO/Worker-1] ...
[2014-12-30 15:54:48,445: INFO/Worker-1] ...
[2014-12-30 15:54:49,811: INFO/Worker-1] ...
[2014-12-30 15:54:50,903: INFO/Worker-1] ...
[2014-12-30 15:55:39,674: INFO/Worker-1] ...
[2014-12-30 15:55:41,024: INFO/Worker-1] ...
[2014-12-30 15:55:42,147: INFO/Worker-1] ...
Run Code Online (Sandbox Code Playgroud)

它接缝只有 1 个工人一直在运行 .. 即按顺序一个接一个。如何将 Celery 配置为运行多个 worker 以并行运行?

小智 21

我现在根据 MartinP 关于工人生成子进程而不是线程的评论更新了我的答案:

芹菜workerworker processes是不同的东西(阅读本文以供参考)。

当一个工作程序启动时,它会产生一定数量的子进程。

这些进程的默认数量等于该机器上的核心数量。

在 Linux 上,您可以通过以下方式检查内核数:

$ nproc --all
Run Code Online (Sandbox Code Playgroud)

否则你可以自己指定,例如:

$ celery -A proj worker --loglevel=INFO --concurrency=2
Run Code Online (Sandbox Code Playgroud)

在上面的例子中,有一个工人可以产生 2 个子进程。通常建议每台机器运行一个工作程序,并发值将定义并行运行的进程数,但如果需要运行多个工作程序,则可以如下所示启动它们:

$ celery -A proj worker -l info --concurrency=4 -n wkr1@hostname
$ celery -A proj worker -l info --concurrency=2 -n wkr2@hostname
$ celery -A proj worker -l info --concurrency=2 -n wkr3@hostname
Run Code Online (Sandbox Code Playgroud)

有关更多信息,请参阅 celery文档

  • concurency 参数不运行线程。它默认运行子进程,因此它并行处理任务 - http://docs.celeryproject.org/en/latest/reference/celery.bin.worker.html#cmdoption-celery-worker-c (3认同)

Ren*_*hle 0

我找到了这个

\n\n

http://docs.celeryproject.org/en/latest/reference/celery.html?highlight=parallel

\n\n

您可以在那里查找Canvas 原语,您可以看到如何分组以进行并行执行。

\n\n
\n

class celery.group(task1[, task2[, task3[, \xe2\x80\xa6 taskN]]]) 创建一组要并行执行的任务。

\n
\n\n

否则,一个好方法是访问 IRC 频道并提出特殊问题。通常有人非常了解这一点,他们可以帮助你。

\n