芹菜多队列设置不接收来自Django的任务

时间:2014-07-25 00:38:08

标签: python django rabbitmq celery django-celery

我使用以下命令运行我的工作人员:

  

celery -A myapp multi start 4 -l debug -Q1:3 queue1,queue2 -Q:4 queue3

当我跑步时,工人们开始时非常好。

  

芹菜检查active_queues

队列显示已分配。

然后我使用以下代码从我的django应用程序启动任务:

result = chain(task1.s(**kwargs).set(queue='queue1'),task2.s(**kwargs).set(queue='queue2'))()

我使用result.parent解析结果变量以获取所有任务ID并将其记录到数据库以供进一步检查。当我发出

task = AsyncResult(task.id)
task.status
我明白了     “待定” 我从链条开始的每一项任务。芹菜日志似乎没有接受任何任务。但是当我发出

celery purge
带有以下

命令

yes

我收到的消息是我的任务实际上已从1个队列中删除 从此处删除的任务上的AsyncResult.status继续显示为“PENDING”,任务永远不会启动。 我使用rabbitmq-server作为具有所有默认配置的代理。我的芹菜配置是默认的。这真的很奇怪,但在另一个环境中,相同的代码和命令会产生其他结果:工作人员也会启动,但他们确实接收到相同的任务并执行它们而没有任何问题。请考虑这里可能存在的问题。

P.S。当我以另一种方式开始工作时:

celery -A myapp worker -Q queue1,queue2,queue3 -l debug

我仍然无法执行任务。 当我修改链条以启动任务并添加

时,问题就开始出现了
.set(queue='queue1')

或queue2或queue3

p.p.s:

我的所有任务都是用

编写的
@shared_task

装饰

是否至少有一种方法可以查看哪些任务(我可以通过celery purge删除)正在等待队列以及他们正在等待的队列名称是什么?

1 个答案:

答案 0 :(得分:0)

Celery默认设置应该涵盖你的情况,所以唯一的问题可能就是你以一种使队列静音的方式定义了以下某些选项,并且在这种情况下考虑将它们注释掉(more in the docs):< / p>

  • CELERY_QUEUES

  • CELERY_ROUTES

  • CELERY_DEFAULT_EXCHANGE

  • CELERY_DEFAULT_ROUTING_KEY

  • CELERY_DEFAULT_ROUTING_KEY

关于你的问题,我想这不是完整的答案,但你可以列出RabbitMQ中的所有活动队列。

使用Celery,来自doc

celery -A proj inspect active

使用RabbitMQ,来自doc

rabbitmqadmin list queues vhost name node messages message_stats.publish_details.rate