繁体   English   中英

以某种方式识别正在正常关闭的 celery 工作人员

[英]Somehow identify celery workers that are shutting down gracefully

我有如下三个 Celery 工作人员,每个工作人员在不同的 ECS 节点上运行:

  • 生产者:不断生成和发送任务给消费者工作者。 每个任务预计需要几分钟来计算并有一个数据库记录。
  • 消费者:接收计算任务并立即开始执行。
  • 看门狗:定期检查数据库记录,找出正在执行的计算任务,然后celery inspect active以验证是否真的有工作人员在执行计算。

我们确保当 Consumer 节点被终止时,其上的 Celery 工作程序将开始正常关闭,以便正在进行的计算可以正常完成。 因为 Celery 将取消注册优雅停止的工作程序,消费者将变得对看门狗不可见,他们会错误地认为计算任务神秘地丢失了......即使消费者仍在处理该任务。

是否可以让 Celery 工作人员在收到暖关机信号时广播“我快死了”的消息? 或者更好的是,我们是否可以让 Watchdog 工人仍然看到正在关闭的工人?

对的,这是可能的。 我负责的 Celery 集群中的节点正在做类似的事情。 这是一个片段:

@worker_shutdown.connect
def handle_worker_shutdown(**kwargs):
    _handle_worker_shutdown(app, _LOGGER, **kwargs)


@worker_ready.connect
def handle_worker_ready(**kwargs):
    _handle_worker_ready(app, _LOGGER, **kwargs)

您应该查看其他一些非常有用的信号,但这两个是必不可少的。 也许worker_shutting_down更适合您的用例......

暂无
暂无

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

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