调试Celery挂起任务

时间:2016-06-21 06:38:11

标签: python flask celery

我有一个使用Flask,Gunicorn,Celery,Redis和RabbitMQ构建的网络应用程序。 系统每天可以管理数千个任务,但有时一个任务永远处于待处理状态。

同样在我的日志中,我看到以下代码中有一个例外:

def taskstatus(task_id):
task = collect_task.AsyncResult(task_id)
if task.state == 'PENDING':
    # job did not start yet
    response = {
        'state': task.state,
        'current': 0,
        'total': 1,
        'status': 'Pending...'
    }
elif task.state != 'FAILURE':
    response = {
        'state': task.state,
        'current': task.info.get('current', 0), #<<This line generate and exception
        'total': task.info.get('total', 1),
        'status': task.info.get('status', '')
    }
    if 'result' in task.info:
        response['result'] = task.info['result']
else:
    # something went wrong in the background job
    response = {
        'state': task.state,
        'current': 1,
        'total': 1,
        'status': str(task.info),  # this is the exception raised
    }
return jsonify(response)

例外情况是:'NoneType' object has no attribute 'get'

因此,据我所知,该任务会暂时从PENDING过渡到另一个州,因此它会输入第二个if,但info属性为None所以提出错误。

我如何解决这个问题,或者至少可以获得有关任务永远处于PENDING状态的原因的更多信息?

0 个答案:

没有答案