两个项目时工人未收到芹菜任务

Celery task not received by worker when two projects

我的同事写了芹菜任务,设置文件中的必要配置,还有主管配置文件。一切都工作得很好。项目已移交给我,我发现了一些必须解决的问题。

一台机器上有两个项目运行,两个项目几乎一样,我们称它们为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
...

问题是,我正在通过循环创建任务,并且只从 projAceleryd 收到了一个任务,其余任务未收到(或者可以由 [= projB 的 13=])。

但是当我为 projB 停止芹菜程序时,一切正常。 请注意, django-app 的实际名称是 project 因此 celery -A project worker/beat -l info.

请裸露,我是 celery 的新手,非常感谢任何帮助。 TIA。

正如 Celery 文档所说,

Celery is an asynchronous task queue/job queue based on distributed message passing.

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

如果项目相似或如您所述几乎相同,您可以使用 Celery Queue 但当然您的项目队列应该不同。 提供了相同的 Celery Docs here.

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

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

例如:command=celery -A project beat -l info -Q <queue_name>

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