芹菜强制所有芹菜进程运行任务



我有一个包含多个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任务将发送给每个使用的员工 从此队列中。

相关内容

  • 没有找到相关文章

最新更新