芹菜迫使所有芹菜进程运行任务

时间:2016-03-09 22:07:47

标签: django celery

我有一个包含多个EC2的设置,我在所有这些设备上运行celery。我还有一个运行celerybeat的方框。我可以让celerybeat与剩余的celery客户端上运行的任务一起运行。

有没有办法让必需的任务所有 celery个实例必须运行?用例是清除日志,对盒子进行基本的健全性检查等。

我已阅读以下内容:

http://docs.celeryproject.org/en/latest/userguide/workers.html

2 个答案:

答案 0 :(得分:0)

实际上,芹菜不像推式系统那样工作,而是像拉式系统一样。

您只需将一个任务放入队列,其中一个可用的工作人员就可以获得并执行。

根据您的问题,我假设在instances下,您的意思是servers芹菜的workers正在运行。所以你想在所有服务器上运行相同的任务。

我认为您只能放置一些任务(对应于服务器编号)并为每个任务指定确切的路由编号(与工作人员的ID相同)。

mytask.apply_async(kwargs={'a': 1, 'b': 2}, routing_key='aaabbc-dddeeff-243453')
mytask.apply_async(kwargs={'a': 1, 'b': 2}, routing_key='bbbbbb-fffddd-dabcfe')
...

答案 1 :(得分:0)

  

Broadcast

     

Celery也可以支持广播路由。这是一个   示例交换broadcast_tasks,将任务副本传递给所有人   与之相关的工人:

     

来自kombu.common import Broadcast

     

CELERY_QUEUES =(广播('broadcast_tasks'),)

     

CELERY_ROUTES = {'tasks.reload_cache':{'queue':'broadcast_tasks'}}   现在,tasks.reload_cache任务将被发送给每个消费的工人   从这个队列。