【问题标题】:Celery worker Queues芹菜工人队列
【发布时间】:2014-06-09 18:21:33
【问题描述】:

我目前使用“Celeryd”将我的 Celery 工作人员作为守护进程运行。我的 /etc/default/celeryd 文件包含以下内容:

CELERYD_NODES="w1 w2 w3"

这显然启动了三个工作进程。

如何配置路由以使用此配置?例如

celeryd -c 2 -l INFO -Q import

如果我从命令行运行 celery,我可以使用 -Q 标志指定队列。我需要告诉我的 w1 工作进程只处理“导入”队列中的任务。

【问题讨论】:

    标签: python celery


    【解决方案1】:

    您可以使用名为 CELERYD_OPTS 的指令添加可选的命令行参数。

    # Names of nodes to start
    #   most will only start one node:
    CELERYD_NODES="w1 w2 w3"
    
    # Extra command-line arguments to the worker
    CELERYD_OPTS="--time-limit=300 --concurrency=4 -Q import"
    

    但据我所知,此选项将告诉所有工作人员将仅从导入队列中消费。

    如果您找不到可接受的答案,您可以尝试单独运行工作人员。

    【讨论】:

    • Arr OK - 这就是我的想法。是否可以将工作人员作为守护进程单独运行?
    • 是的,您可以拥有多个工人。 celery.readthedocs.org/en/latest/tutorials/daemonizing.html 只需为每个工人创建 celeryd 初始化脚本;比如/etc/init.d/worker1d/etc/init.d/worker2d,并创建同名的配置文件/etc/default/worker1d/etc/default/worker2d。很明显,现在您可以独立配置任何工作程序。
    • 如果使用像上面这样的名称节点,似乎不能使用-Q:1-3 name,但应该将它们命名为-Q:w1,w2,w3 name
    【解决方案2】:

    您可以通过在 CELERYD_OPTS 中提供适当的参数来让不同的工作人员从不同/相同的队列中消费。

    请参考:http://celery.readthedocs.org/en/latest/reference/celery.bin.multi.html

    该链接适用于 celery 多文档,但您也可以以相同的方式为您的案例提供参数。

    # 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
    

    可以用作:

    $ CELERYD_OPTS="--time-limit=300 --concurrency=8 -l INFO -Q:1-3 images,video -Q:4,5 data -Q default -L:4,5 DEBUG"
    

    除非需要,否则不要创建额外的守护进程。

    希望这会有所帮助。

    【讨论】:

      【解决方案3】:

      值得注意的是,您可以使用带有 CELERYD_OPTS 参数的节点名称,例如

      CELERYD_OPTS="--time-limit=300 --concurrency=4 --concurrency:w3=8 -Q:w1 import"
      

      【讨论】: