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