Celery 失去工作进程

4
我在我的项目中使用 celery 4.4.0 版本(Ubuntu 18.04.2 LTS)。当我抛出异常“too few functions in features to classify”时,celery 项目失去了 worker,并且我得到了如下日志:
[2020-02-11 15:42:07,364] [ERROR] [Main ] Task handler raised error: WorkerLostError('Worker exited prematurely: exitcode 0.')
最近的一次调用是:
File "/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 prematurely: exitcode 0.
[2020-02-11 15:42:07,474] [DEBUG] [ForkPoolWorker-61] Closed channel #1
你有任何解决这个问题的想法吗?
1个回答

2

WorkerLostError(工作程序丢失错误)几乎就像内存不足错误一样,它们无法解决。它们会不时地发生。您应该做的是使您的任务具有幂等性,让Celery重试由于工作程序崩溃而失败的任务。

听起来很平凡,但在许多情况下并非如此。举个例子,并非所有任务都能够成为幂等任务。Celery在处理WorkerLostError时仍存在缺陷。因此,您需要密切监视Celery集群并对这些事件做出反应,尝试将其最小化。换句话说,找出工作程序崩溃的原因 - 它是因为消耗了所有内存而被系统杀死吗?它是否仅因在AWS弹性计算云的spot实例上运行并被终止而被杀死?它是否是由某人执行“kill -9 <worker pid>”而被杀死?所有这些情况都可以用这种或那种方式处理...


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接