Celery工作队列

1 投票
3 回答
3923 浏览
提问于 2025-04-18 04:05

我现在使用“Celeryd”来作为守护进程运行我的Celery工作者。我的 /etc/default/celeryd 文件里包含了以下内容:

CELERYD_NODES="w1 w2 w3"

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

我该如何配置路由来配合这个设置呢?比如:

celeryd -c 2 -l INFO -Q import

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

3 个回答

-1

值得注意的是,你可以在CELERYD_OPTS参数中使用节点名称,比如说:

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

你可以使用一个叫做 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"

不过据我所知,这个选项会让所有的工作进程只从导入队列中获取任务。

如果你找不到合适的答案,可以尝试单独运行工作进程。

7

你可以通过在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"

除非必要,不要创建额外的守护进程。

希望这些信息对你有帮助。

撰写回答