我的同事已经编写了芹菜任务,设置文件中的必要配置,以及主管配置文件。一切都很好。这些项目交给我,我看到了一些我必须解决的问题。
在一台计算机上运行两个项目,两个项目几乎相同,我们称之为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
...
问题是,我正在通过循环创建任务,只从celeryd
projA
收到一个任务,剩下的任务没有收到(或者{{1}可以接收} celeryd
)。
但当我停止projB
的芹菜计划时,一切运作良好。 请注意, django-app的实际名称是项目芹菜 - 项目工人/击败-l信息。
请裸露,我是芹菜的新手,任何帮助表示赞赏。 TIA。
答案 0 :(得分:1)
正如芹菜文档所说,
Celery是基于分布式消息传递的异步任务队列/作业队列。
当通过循环创建多个任务时,任务会均匀分配给两个不同的工作人员,即projA
的工人和projB
的工人,因为您的工人是相同的。
如果项目相似或者你提到的几乎相同,你可以使用Celery Queue
但当然你的项目队列应该是不同的。
同样提供Celery文档here。
您需要设置CELERY_DEFAULT_QUEUE
,CELERY_DEFAULT_ROUTING_KEY
和CELERY_QUEUES
在您的settings.py文件中。
您的supervisor.conf
文件需要在所有程序的命令行中使用队列名称。
对于Ex:command=celery -A project beat -l info -Q <queue_name>
根据我的经验,这应该有效。