首页 文章

为不同的芹菜 Worker 分配不同的任务

提问于
浏览
9

我正在使用此命令运行我的服务器:

celery worker -Q q1,q2 -c 2

这表明我的服务器将处理队列 q1q2 上的所有任务,并且我有2名工作人员正在运行 . 我的服务器应支持2个不同的任务:

@celery.task(name='test1')
def test1():
    print "test1"
    time.sleep(3)

@celery.task(name='test2')
def test2():
    print "test2"

如果我将 test1 任务发送到队列 q1test2q2 ,则两个工作人员都将运行这两个任务 . 结果将是:

test1
test2
test1
test2
...

现在我需要的是我的一个 Worker 处理 test1 而另一个处理 test2 . 一个解决方案是运行两个像这样的芹菜 Worker :

celery worker -Q q1 -c 1
celery worker -Q q2 -c 1

每个人处理1个队列 . 但我想让它们更清洁并使用 -c 2 . 我找到Celery Routing但不确定这是不是我想要的 .

1 回答

  • 12

    我找到了答案,我把它放在这里以防其他人想要做同样的事情:

    而不是使用 celery worker -Q q1,q2 -c 2 ,可以使用 celery multi

    celery multi start 2 -Q:1 q1 -Q:2 q2 -c:1 1 -c:2 1
    

    这表示我们有2个队列: -Q:1 q1 表示名称为 q1 的队列#1, q2 表示相同,我们对每个队列都有不同的并发, -c:1 1 表示第一个芹菜工作者的并发度为1 .

相关问题