我在我的项目(Ubuntu 18.04.2 LTS)中使用了 celery 4.4.0 版本。当我提出异常('功能中的功能太少无法分类')时, celery 项目失去了 worker ,我得到了这样的日志:
[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”, line 1267, in mark_as_worker_lost human_status(exitcode)), billiard.exceptions.WorkerLostError: Worker exited early: exitcode 0.
[2020-02-11 15:42:07,474] [DEBUG] [ForkPoolWorker-61] 关闭 channel #1
你知道如何解决这个问题吗?
最佳答案
WorkerLostError 几乎就像 OutOfMemory 错误 - 它们无法解决。它们将不时继续发生。您应该做的是使您的任务具有幂等性,并让 Celery 重试因工作线程崩溃而失败的任务。
这听起来微不足道,但在许多情况下并非如此。例如,并非所有任务都可以是幂等的。 Celery 在处理 WorkerLostError 的方式上仍然存在错误。因此,您需要密切监视您的 Celery 集群并对这些事件使用react,并尽量减少它们。换句话说,找出 worker 崩溃的原因——它是否被系统杀死,因为它消耗了所有内存?是否仅仅因为它在 AWS Spot 实例上运行而被终止,并且被终止?是否被执行死刑的人杀死kill -9 <worker pid>
?所有这些情况都可以这样或那样处理......
关于 celery 失去 worker ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60205427/