celery - 芹菜 - 检测空闲工人的信号
问题描述
我有 1 个 celery 经纪人和几个 celery 工人,都与 rabbitMQ 通信。在我的设置中,我向我的 celery 工人发送了几个任务,他们将处理所有任务(大约需要 1 小时),然后我将手动终止我的 celery 工人。
我想转向一个系统,如果 celery worker id 'idle'(我定义为:在 0 个时间段内有 0 个活动任务timeout_seconds
,我将预先定义),则该 worker 将以编程方式终止。所有工作人员将有大约相同的任务数来运行,并且都会在同一时间“空闲”。
我设置了可以让我终止工作人员的代码,但我不确定如何检测到工作人员处于“空闲”状态并准备好终止工作。我想我想使用一个信号,但看起来没有符合我要求的信号
解决方案
在我工作的地方,我们的任务基本上是在做你想做的事——根据“情况”自动扩大/缩小集群。这个过程的关键是 Celery inspect/control API,所以我建议你熟悉它。这是一个没有充分记录的领域,因此请从以下内容开始:
insp = celery_app.control.inspect()
active_queues = insp.active_queues()
# Note: between these two calls some nodes may shut down and disappear
# from the dictionary so may need to deal with this...
active_stats = insp.active()
您可以在 Celery 集群运行任务时在单独的 IPython 会话中执行此操作,并查看那里有什么......
推荐阅读
- html - 嵌套时使用css舍入图像边框不起作用
- java - Elasticsearch 建模最佳实践
- c# - 摘要列表
.添加不适用于基本构造函数 - apache-spark - 如何通过 Spark SQL 创建具有指定位置的托管配置单元表?
- encoding - Azure 函数 - ServiceBusTrigger - 异常绑定消息
- c - 结构函数返回的垃圾值
- javascript - 带有递增大写字母的 Adobe Acrobat 展览标签邮票
- javascript - 如何将变量附加到for循环外的另一个变量中?
- grails - Grails GORM 强制更新语句,即使 GORM 认为实例不脏
- android - API < 23 上的 StatusBar 深色图标