为不同的芹菜工人分配不同的任务

时间:2013-10-29 22:41:12

标签: python celery

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

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
...

现在我需要的是我的一个工人处理test1而另一个处理test2。一个解决方案是像这样经营两个芹菜工人:

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

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

1 个答案:

答案 0 :(得分: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。