我正在使用以下命令运行我的服务器:
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
...
现在我需要的是我的一个工人处理test1
,另一个处理test2
。一种解决方案是像这样运行两个芹菜工人:
celery worker -Q q1 -c 1
celery worker -Q q2 -c 1
每个处理 1 个队列。但我想让它们更干净并使用-c 2
.我找到了芹菜路由,但不确定这是否是我想要的。
我找到了答案,我把它放在这里,以防其他人也想这样做:
除了使用 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
表示队列 #1,名称为 q1
,q2
相同,每个队列都有不同的并发性,-c:1 1
表示第一个芹菜工作线程的并发性为 1。