首页 > 解决方案 > 芹菜失去工人

问题描述

我在我的项目中使用 celery 4.4.0 版本(Ubuntu 18.04.2 LTS)。当我提出异常('功能中的功能太少无法分类')时,芹菜项目失去了工人,我得到了这样的日志:

[2020-02-11 15:42:07,364] [ERROR] [Main] 任务处理程序引发错误:WorkerLostError('Worker 提前退出:exitcode 0.')

回溯(最近一次通话最后):

文件“/var/lib/virtualenvs/simus_classifier_new/lib/python3.7/site-packages/billiard/pool.py”,第 1267 行,在 mark_as_worker_lost human_status(exitcode)),billiard.exceptions.WorkerLostError: Worker 过早退出:exitcode 0。

[2020-02-11 15:42:07,474] [DEBUG] [ForkPoolWorker-61] 关闭通道 #1

你知道如何解决这个问题吗?

标签: celery

解决方案


WorkerLostError 几乎就像 OutOfMemory 错误 - 它们无法解决。它们将不时发生。您应该做的是使您的任务具有幂等性,并让 Celery 重试由于工人崩溃而失败的任务。

这听起来微不足道,但在许多情况下并非如此。例如,并非所有任务都可以是幂等的。Celery 在处理 WorkerLostError 的方式上仍然存在错误。因此,您需要密切监视您的 Celery 集群并对这些事件做出反应,并尽量减少它们。换句话说,找出工人崩溃的原因——它是否被系统杀死是因为它消耗了所有的内存?它是否仅仅因为它在 AWS Spot 实例上运行而被终止,并且被终止了?它是被执行死刑的人杀死的kill -9 <worker pid>吗?所有这些情况都可以这样或那样处理......


推荐阅读