两个项目时工人未收到芹菜任务
Celery task not received by worker when two projects
我的同事写了芹菜任务,设置文件中的必要配置,还有主管配置文件。一切都工作得很好。项目已移交给我,我发现了一些必须解决的问题。
一台机器上有两个项目运行,两个项目几乎一样,我们称它们为projA
和projB
。
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
...
问题是,我正在通过循环创建任务,并且只从 projA
的 celeryd
收到了一个任务,其余任务未收到(或者可以由 [= 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_QUEUE
、CELERY_DEFAULT_ROUTING_KEY
和 CELERY_QUEUES
在你的 settings.py 文件中。
并且您的 supervisor.conf
文件需要在所有程序的命令行中使用队列名称。
例如:command=celery -A project beat -l info -Q <queue_name>
根据我的经验,这应该有效。
我的同事写了芹菜任务,设置文件中的必要配置,还有主管配置文件。一切都工作得很好。项目已移交给我,我发现了一些必须解决的问题。
一台机器上有两个项目运行,两个项目几乎一样,我们称它们为projA
和projB
。
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
...
问题是,我正在通过循环创建任务,并且只从 projA
的 celeryd
收到了一个任务,其余任务未收到(或者可以由 [= 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_QUEUE
、CELERY_DEFAULT_ROUTING_KEY
和 CELERY_QUEUES
在你的 settings.py 文件中。
并且您的 supervisor.conf
文件需要在所有程序的命令行中使用队列名称。
例如:command=celery -A project beat -l info -Q <queue_name>
根据我的经验,这应该有效。