我有一个使用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
状态的原因的更多信息?