我有一个包含多个EC2的设置,并且我celery
在所有EC2上运行。我还有一个装有celerybeat
的盒子。我能够让celerybeat
运行在其余celery
客户端上运行的任务。
有没有办法使所有celery
实例都必须运行的必需任务?用例是清除日志,对框运行基本的健全性检查等。
我已阅读以下内容:
http://docs.celeryproject.org/en/latest/userguide/workers.html
芹菜不是作为推力式系统,而是作为拉动式系统工作。
您只需将任务放入队列中,其中一个可用的工作线程即可获取并执行。
从你的问题中,我假设在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')
...
广播
芹菜还可以支持广播路由。这是一个 向所有人传递任务副本的示例交换broadcast_tasks 与其连接的工作人员:
从 海带.通用导入 广播
CELERY_QUEUES = (广播('broadcast_tasks'), )
CELERY_ROUTES = {'tasks.reload_cache':{'queue': 'broadcast_tasks'}} 现在,tasks.reload_cache任务将发送给每个使用的员工 从此队列中。