celery django 守护进程上的多个工作人员和多个队列

Posted

技术标签:

【中文标题】celery django 守护进程上的多个工作人员和多个队列【英文标题】:multiple workers and multiple queues on celery django daemon 【发布时间】:2014-05-29 12:51:45 【问题描述】:

我正在使用 celery-django 在我的站点后端对任务进行排队。 我正在尝试创建一个设置,其中有两个名为“low”和“high”的队列以及两个工人 W1 和 W2。 我希望他们通过以下方式使用队列中的任务:

W1

W2

通常可以这样。

打开终端1并输入 $celery worker -n W1 -Q low,high

打开终端2并输入 $celery worker -n W2 -Q high

但是我试图通过 celeryd 守护进程来做同样的事情。

我正在按照链接中给出的步骤进行操作:http://celery.readthedocs.org/en/latest/tutorials/daemonizing.html#example-configuration 但是可用的选项似乎不足以满足要求。

请帮助我进行一些我不知道的配置,这可以使它成为可能。除非真的有必要,否则我宁愿不运行多个守护进程或使用其他工具,例如 supervisord(也许您也可以就此向我提出建议)。

【问题讨论】:

【参考方案1】:

您可以使用CELERYD_OPTS 选项传递-Q 参数,类似于Celery reference 中的示例:

# Advanced example starting 10 workers in the background:
#   * Three of the workers processes the images and video queue
#   * Two of the workers processes the data queue with loglevel DEBUG
#   * the rest processes the default' queue.
$ celery multi start 10 -l INFO -Q:1-3 images,video -Q:4,5 data
    -Q default -L:4,5 DEBUG

# You can show the commands necessary to start the workers with
# the 'show' command:
$ celery multi show 10 -l INFO -Q:1-3 images,video -Q:4,5 data
    -Q default -L:4,5 DEBUG

【讨论】:

如果我将节点命名为CELERYD_NODES="w1 w2 w3 w4 w5" 而不是使用-c 4,我还能使用-Q:1-3 的语法吗?【参考方案2】:

您可以在 CELERY_NODES 中指定多个节点并将节点名称传递给 CELERYD_OPTS 参数,例如:

CELERY_NODES="W1 W2"
CELERYD_OPTS="-Q:W1 low,high -Q:W2 high"

【讨论】:

以上是关于celery django 守护进程上的多个工作人员和多个队列的主要内容,如果未能解决你的问题,请参考以下文章

Django celery 和 celery-beat 守护进程脚本错误

为啥 Celery 守护进程看不到任务?

芹菜不启动多个工人

在 Elastic Beanstalk 上使用 Supervisor 和 Django 将 Celery 作为守护进程运行

多个工作节点上的 Django + Celery 任务

如何使用 celery 守护进程调用 celery 任务