使用exitcode调试芹菜WorkerLostError(Heroku上的Django 1.5.5 +芹菜3.1.8 + RabbitMQ 3.1.3)

Chr*_*isR 2 django heroku rabbitmq celery

我的平台经历了很多任务(每天几千个).一些较长的任务,他们一直失败,出现以下错误:

Traceback (most recent call last):
  File "/app/.heroku/python/lib/python2.7/site-packages/billiard/pool.py", line 1167, in mark_as_worker_lost
    human_status(exitcode)),
WorkerLostError: Worker exited prematurely: exitcode 0.
Run Code Online (Sandbox Code Playgroud)

根据Celery的花,它没有提供任何超过发布的追溯,任务是在它开始前四分钟收到(2014-12-22 22:46:46.196814)(2014-12-22 22:50:03.469647 ),并在短短十秒内失败(纪元1419288613.34或2014-12-22 22:50:13).

这是我平台上反复出现的问题.它主要发生在运行scrapy 0.24.2的任务中,但也可能发生在其他任务中.

WorkerLostError的其他持续时间(退出代码为零)是三分钟,五分钟或七分钟.

有什么可能导致这个问题的想法?所有任务在本地运行完美.谢谢.

小智 8

我的建议是检查你正在使用的所有模块以及'raise BaseException'的代码.我遇到了WorkerLostError exitcode 0的问题.

在经过大量调试并特别确定任务失败的地方后,我发现是在引发BaseException时.发生了WorkerLostError,而不是提供错误消息.

通过更改为"raise Exception",在任务内部出现错误时提供了实际的错误消息.对于您的情况,这可能不一样,但这是我在处理相同错误时发现的.


小智 6

我也注意到同样的错误:

[...ERROR/MainProcess] Task ... raised unexpected: WorkerLostError('Worker exited prematurely: exitcode 0.',)
Traceback (most recent call last):
  File "/usr/local/lib/python3.5/site-packages/billiard/pool.py", line 1175, in mark_as_worker_lost
    human_status(exitcode)),
billiard.exceptions.WorkerLostError: Worker exited prematurely: exitcode 0.
Run Code Online (Sandbox Code Playgroud)

不仅具有BaseException,还具有从 子类化的自定义异常BaseException。更改基类以Exception允许实际异常与堆栈跟踪一起引发。