我需要从 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 关于工人生成子进程而不是线程的评论更新了我的答案:
芹菜worker和worker 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文档
我找到了这个
\n\nhttp://docs.celeryproject.org/en/latest/reference/celery.html?highlight=parallel
\n\n您可以在那里查找Canvas 原语,您可以看到如何分组以进行并行执行。
\n\n\n\n\nclass celery.group(task1[, task2[, task3[, \xe2\x80\xa6 taskN]]]) 创建一组要并行执行的任务。
\n
否则,一个好方法是访问 IRC 频道并提出特殊问题。通常有人非常了解这一点,他们可以帮助你。
\n| 归档时间: |
|
| 查看次数: |
45617 次 |
| 最近记录: |