两个项目时,工人没有收到芹菜任务

时间:2016-12-25 15:29:15

标签: python django celery supervisor

我的同事已经编写了芹菜任务,设置文件中的必要配置,以及主管配置文件。一切都很好。这些项目交给我,我看到了一些我必须解决的问题。

在一台计算机上运行两个项目,两个项目几乎相同,我们称之为projAprojB

supervisord.conf文件如下:

;for projA
[program:celeryd]
directory=/path_to_projA/
command=celery -A project worker -l info
...

[program:celerybeat]
directory=/path_to_projA/
command=celery -A project beat -l info
...

; For projB
[program:celerydB]
directory=/path_to_projB/
command=celery -A project worker -l info
...

[program:celerybeatB]
directory=/path_to_projB/
command=celery -A project beat -l info
...

问题是,我正在通过循环创建任务,只从celeryd projA收到一个任务,剩下的任务没有收到(或者{{1}可以接收} celeryd)。

但当我停止projB的芹菜计划时,一切运作良好。 请注意, django-app的实际名称是项目芹菜 - 项目工人/击败-l信息。

请裸露,我是芹菜的新手,任何帮助表示赞赏。 TIA。

1 个答案:

答案 0 :(得分:1)

正如芹菜文档所说,

  

Celery是基于分布式消息传递的异步任务队列/作业队列。

当通过循环创建多个任务时,任务会均匀分配给两个不同的工作人员,即projA的工人和projB的工人,因为您的工人是相同的。

如果项目相似或者你提到的几乎相同,你可以使用Celery Queue但当然你的项目队列应该是不同的。 同样提供Celery文档here

您需要设置CELERY_DEFAULT_QUEUECELERY_DEFAULT_ROUTING_KEYCELERY_QUEUES  在您的settings.py文件中。

您的supervisor.conf文件需要在所有程序的命令行中使用队列名称。

对于Ex:command=celery -A project beat -l info -Q <queue_name>

根据我的经验,这应该有效。