我在旧的Celery 3.0.24中找到了amqp后端,它为每个任务创建了结果队列,所以在阅读完之后:http://docs.celeryproject.org/en/master/whatsnew-3.1.html#new-rpc-result-backend 我将Celery升级到3.1.18,因为它说:
新的RPC结果后端 这个amqp结果后端的新实验版本是在经典RPC场景中使用的一个很好的替代方案,其中启动任务的过程始终是检索结果的过程。
它使用Kombu发送和检索结果,每个客户端使用唯一的队列来发送回复。这避免了原始amqp结果后端的显着开销,该后端为每个任务创建一个队列。
但是,当我按照以下方式测试时,情况并非如此:
tasks.py
celery = Celery('tasks', backend='rpc')
@celery.task
def mul(x, y):
return x * y
test_tasks.py
result = mul.delay(2, 3)
print "mul.delay(x, y)={0}".format(result.get())
开始工作
celery -A tasks worker -l info
观察rabbitmq中的队列
sudo rabbitmqctl list_queues
运行测试
python test_tasks.py
因此,每次运行此测试时,我都会看到创建了一个新的结果队列。它与文档正好相反。如果我像这样将rpc切换到amqb,还有更多:
celery = Celery('tasks', backend='amqp')
再次尝试测试,我可以看到创建的队列,但很快就会在Celery 3.1.18中自动删除,这正是我想要的。只是好奇为什么行为不像文档说的那样,amqp后端工作,而rcp后端不起作用。