我正在使用此命令运行我的服务器:
celery worker -Q q1,q2 -c 2
这表明我的服务器将处理队列 q1
和 q2
上的所有任务,并且我有2名工作人员正在运行 . 我的服务器应支持2个不同的任务:
@celery.task(name='test1')
def test1():
print "test1"
time.sleep(3)
@celery.task(name='test2')
def test2():
print "test2"
如果我将 test1
任务发送到队列 q1
和 test2
到 q2
,则两个工作人员都将运行这两个任务 . 结果将是:
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 回答
我找到了答案,我把它放在这里以防其他人想要做同样的事情:
而不是使用
celery worker -Q q1,q2 -c 2
,可以使用celery multi
:这表示我们有2个队列:
-Q:1 q1
表示名称为q1
的队列#1,q2
表示相同,我们对每个队列都有不同的并发,-c:1 1
表示第一个芹菜工作者的并发度为1 .