python–WorkerLostError(‘工人过早退出:信号15(SIGTERM).’)

python–WorkerLostError(‘工人过早退出:信号15(SIGTERM).’),第1张

概述我最近开始在一个新的Django项目中使用芹菜.设置: -------------- celery@123 v3.1.7 (Cipater) ---- **** ----- --- * *** * -- Linux-3.8.11-ec2-x86_64-with-debian-squeeze-sid -- * - **** --- - ** --

我最近开始在一个新的Django项目中使用芹菜.设置:

 -------------- celery@123 v3.1.7 (Cipater) ---- **** -----  --- * ***  * -- linux-3.8.11-ec2-x86_64-with-debian-squeeze-sID -- * - **** ---  - ** ---------- [config] - ** ---------- .> app:         nextlanding_API:0x1c23250 - ** ---------- .> transport:   redis://rediscloud@123123 - ** ---------- .> results:     djcelery.backends.database:DatabaseBackend - *** --- * --- .> concurrency: 4 (prefork) -- ******* ----  --- ***** ----- [queues]  -------------- .> celery           exchange=celery(direct) key=celery software -> celery:3.1.7 (Cipater) kombu:3.0.8 py:2.7.4            billiard:3.3.0.13 redis:2.9.0platform -> system:linux arch:64bit,ELF imp:cpythonloader   -> celery.loaders.app.AppLoadersettings -> transport:redis results:djcelery.backends.database:DatabaseBackend 

我正在调查一个问题,即eta 24小时的任务正在消失(我确保visibility_timeout小时> 24小时).当我热情地关闭工作人员时,日志语句显示几条消息被确认.例:
恢复26条未确认的消息.

但是,我预计会恢复大约50个未确认的消息.仔细观察我的日志,我看到:

[ERROR] celery.worker.job: Task myproj_task[xxx] raised unexpected: WorkerLostError('Worker exited prematurely: signal 15 (SIGTERM).',)...WorkerLostError: Worker exited prematurely: signal 15 (SIGTERM). Restoring 26 unackNowledged message(s). Process exited with status 0 

我见过其他人报告说OOM会杀死他们的进程.我在Heroku上,没有看到R14代码.

最后一点上下文,我从我的任务中产生了新的进程.

我的问题是:WorkerLostError是我应该担心的吗?状态代码是15(SIGTERM)似乎没问题.如果此错误不正常,是否可能导致丢失ETA任务?

编辑

起初我以为物品正在消失但是在放入一些详细的日志之后,我可以看到任务已经发出但从未在redis中持续存在:

myproj_email_task已发送. task_ID:b6ce2b97-d5b8-4850-9e43-9185426cd9f6

但是,查看redis中的任务,任务b6ce2b97-d5b8-4850-9e43-9185426cd9f6不存在.

因此看起来任务不会消失,但要么根本没有发送,要么没有被放入未包装的redis密钥.

最佳答案这些WorkerLostErrors的原因很可能是Celery和Heroku的行为不兼容:

> Celery工作者期望在父工作进程上使用SIGTERM,在这种情况下,它允许其子进程完成当前任务.
>当对dyno进行“热关机”时,Heroku会向dyno中的所有进程发送SIGTERM.

因此,所有工作程序子进程也会获得SIGTERM并立即开始终止,从而产生WorkerLostErrors.

已经为未发布的Celery 4.0:https://github.com/celery/celery/issues/2839准备了一个解决方法

我还没有找到3.1.19的解决方案.

总结

以上是内存溢出为你收集整理的python – WorkerLostError(‘工人过早退出信号15(SIGTERM).’)全部内容,希望文章能够帮你解决python – WorkerLostError(‘工人过早退出:信号15(SIGTERM).’)所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: https://outofmemory.cn/langs/1207843.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-06-04
下一篇 2022-06-04

发表评论

登录后才能评论

评论列表(0条)

保存