Python 芹菜;WorkerLosterError:工作人员过早退出:信号11(SIGSEGV)";

Python 芹菜;WorkerLosterError:工作人员过早退出:信号11(SIGSEGV)";,python,celery,django-celery,celery-task,djcelery,Python,Celery,Django Celery,Celery Task,Djcelery,我正在本地开发Django应用程序,,需要将CSV文件作为输入,并对该文件进行一些分析。我在本地运行芹菜、RabbitMQ和web服务器。导入文件时,我在芹菜服务器上看到以下错误: [2015-12-11 16:58:53,906: WARNING/MainProcess] celery@Joes-MBP ready. [2015-12-11 16:59:11,068: ERROR/MainProcess] Task program_manager.tasks.analyze_list_impo

我正在本地开发Django应用程序,需要将CSV文件作为输入,并对该文件进行一些分析。我在本地运行芹菜、RabbitMQ和web服务器。导入文件时,我在芹菜服务器上看到以下错误:

[2015-12-11 16:58:53,906: WARNING/MainProcess] celery@Joes-MBP ready.
[2015-12-11 16:59:11,068: ERROR/MainProcess] Task program_manager.tasks.analyze_list_import_program[db22de16-b92f-4220-b2bd-5accf484c99a] raised unexpected: WorkerLostError('Worker exited prematurely: signal 11 (SIGSEGV).',)
Traceback (most recent call last):
File "/Users/joefusaro/rl_proto2/venv/lib/python2.7/site-packages/billiard/pool.py", line 1175, in mark_as_worker_lost
human_status(exitcode)),
WorkerLostError: Worker exited prematurely: signal 11 (SIGSEGV).
我不知道如何进一步解决这个问题;如果有帮助,我已从program_manager/tasks.py复制了相关代码:

from __future__ import absolute_import

import csv
import rollbar
from celery import shared_task
from celery.utils.log import get_task_logger

from qscore.models import QualityScore
from integrations.salesforce.prepare import read_csv
from qscore.quality_score import QualityScoreCalculator


logger = get_task_logger(__name__)

@shared_task
def analyze_list_import_program(program):
    program.status = 'RUN'
    program.save()

    df = read_csv(program.csv_file.file)
    try:
        qs = program.get_current_quality_score()
        qs_calc = QualityScoreCalculator(df, qs)
        qscore_data = qs_calc.calculate()
        QualityScore.objects.filter(id=qs.id).update(**qscore_data)
    except Exception as e:
        rollbar.report_exc_info()
        program.status = 'ERROR'
    else:
        program.status = 'COMPL'
    finally:
        program.save()

问题是您的芹菜任务正在尝试取消拾取/反序列化实际的Django对象
程序
。将
program\u id
作为参数传递给任务,并在任务本身中重新蚀刻对象。

这可以通过在单个任务函数中导入python包来解决,而不是在tasks.py的顶部


我已删除了tasks.py文件顶部导入的所有软件包,除了从.celery
导入app from.celery import app
之外,然后在各个任务函数中导入软件包。成功了

我真的怀疑这和芹菜有关。信号11表示分割错误。尝试单独执行代码以隔离问题。您可以在此处阅读有关分段错误的更多信息