celery 失去 worker

标签 celery

我在我的项目(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/

相关文章:

python - 如何使用 Celery 制作包含所有待处理任务的仪表板?

python - Celery池进程、任务以及系统进程和内存空间

python - 调整 celery 以获得高性能

python - Celeryd 启动太多进程

django - AWS Elastic Beanstalk 上的 Celery 配置问题 - "No config updates to processes"

python - 使用 Flask 和 SQLAlchemy 的 Celery 任务中的数据库未更新

django - Django请求完成后如何启动 celery 任务

python - 如何调试在 Eclipse 中本地运行的 Celery/Django 任务

python - 带有 Flask 和 Flask-SQLAlchemy 的 Celery 无法更新数据库记录

python - 强制 celery 使用 StrictRedis