Celery因信号11而退出

9
我们正在使用以下技术:
OS Ubuntu 12.04.4 LTS
celery==3.0.24
django-celery==3.0.23
billiard==3.3.0.18

我们有一些任务失败并显示“信号11退出”,以下是日志文件的副本。
celery使用以下设置在supervisord实例中运行。
manage.py celery worker -E -B --loglevel=info

请指导一下,是什么原因导致这种情况发生?如何调试并找到根本原因?

[2014-07-02 15:00:44,765: ERROR/MainProcess] Process 'Worker-2' pid:23317 exited with 'signal 11 (SIGSEGV)'
[2014-07-02 15:00:44,797: ERROR/MainProcess] Task mbox.retrieve_by_message_id[e70fc4f9-585e-4993-a43b-35942052bf2a] raised unexpected: WorkerLostError('Worker exited prematurely: signal 11 (SIGSEGV).',)
Traceback (most recent call last):
  File "/home/ubuntu/.virtualenvs/paribus/local/lib/python2.7/site-packages/billiard/pool.py", line 1170, in mark_as_worker_lost
    human_status(exitcode)),
WorkerLostError: Worker exited prematurely: signal 11 (SIGSEGV).

信号11与芹菜无关。请尝试单独执行任务中的代码。 - Chillar Anand
1
有没有好的解决方法来解决这个问题? - Adrian Grzywaczewski
但是,根据我们的用例,它在某种程度上与之相关(如果有人能提供帮助,请尽管提供):
当我们运行 SQL 命令,比如在 Python 视图中执行 video = Video.objects.get(pk=1) 时,它可以正常工作而不会出现任何问题。然而,如果在被定义为 celery 的 @shared_task 的方法中启动,则会崩溃并通过 ERROR/MainProcess] Process 'ForkPoolWorker-7' pid:25512 exited with 'signal 11 (SIGSEGV)' 终止 Python。 更多信息请参考: https://stackoverflow.com/questions/73265748/accessing-postgres-db-in-redisrabbitmqcelery-kills-python-task-with-signal-11
- Sinisa Rudan
1个回答

0
根据我们的使用情况,相同的代码在从Celery任务运行时被杀死,而在从Python View运行时不会。
当我们在Python视图中运行SQL命令,如:video = Video.objects.get(pk=1),它可以正常工作。然而,如果在定义为celery的@shared_task的方法中启动,则会崩溃并带有错误信息'ERROR/MainProcess] Process 'ForkPoolWorker-7' pid:25512 exited with 'signal 11 (SIGSEGV)'。
更多内容请参见(如果有人能提供帮助,请访问链接): Accessing Postgres DB in REDIS+RABBITMQ+Celery kills Python task with 'signal 11 (SIGSEGV)'

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