繁体   English   中英

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

[英]celery force all celery processes to run task

我有一个带有多个EC2的设置,并且所有它们上都运行着celery 我也有一个运行着celerybeat盒子。 我能够使celerybeat与在其余celery客户端上运行的任务一起运行。

有没有办法完成所有 celery实例必须运行的必需任务? 用例是清除日志,在包装盒上运行基本的健全性检查等。

我已阅读以下内容:

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

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

您只需将任务放入队列中,然后便有一名工作人员将其执行。

根据您的问题,我假设在instances您指的是其芹菜workers正在运行的servers 因此,您想在所有服务器上运行相同的任务。

我认为您只能放置一些任务(与服务器号相对应),并为每个任务指定确切的路由号(与工作人员的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')
...

广播

Celery还可以支持广播路由。 这是一个示例交换broadcast_tasks,它向与其连接的所有工作人员提供任务副本:

来自kombu.common的进口广播

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

CELERY_ROUTES = {'tasks.reload_cache':{'queue':'broadcast_tasks'}}现在,tasks.reload_cache任务将发送给使用此队列的每个工作线程。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM