gpt4 book ai didi

python - AsyncResult(task_id) 即使在任务开始后也返回 "PENDING"状态

转载 作者:太空狗 更新时间:2023-10-30 00:07:07 28 4
gpt4 key购买 nike

在项目中,我尝试轮询一个长时间运行的任务的 task.state 并更新其运行状态。它在开发中有效,但是当我将项目移动到生产服务器上时它就不起作用了。即使我可以看到任务在 flower 上开始,我也一直收到“PENDING”。但是,我仍然可以在任务完成时更新结果,即 task.state == 'SUCCESS'。我在生产中使用 python 2.6、Django 1.6 和 Celery 3.1,结果后端 AMQP。

@csrf_exempt
def poll_state(request):
data = 'Fail'

if request.is_ajax():
if 'task_id' in request.POST.keys() and request.POST['task_id']:
task_id = request.POST['task_id']
email = request.POST['email']
task = AsyncResult(task_id)
print "task.state=", task.state
if task.state == 'STARTED':
task_state = 'Running'
data = 'Running'
#data = 'Running'
elif task.state == 'PENDING' or task.state == 'RETRY':
task_state = 'Waiting'
data = 'Pending'
elif task.state == 'SUCCESS':
task_state = 'Finished'
if task.result:
data = task.result
else:
data = 'None'

else:
task_state = task.state
data = 'Error'
print 'data status =', task_state
else:
task_state = task.state
data = 'Error'
else:
task_state = task.state
data = "Error"

json_data = json.dumps({'task_state':task_state, 'task_data':data})

return HttpResponse(json_data, mimetype='application/json')

另一方面,flower 总是离线显示工作人员的状态,但任务状态是正确的。使用 celery events 3.1.12 (Cipater) 时,它显示正确的工作人员状态。

最佳答案

对于 Celery 4.1.0 和 Django 1.11.7,这是您在 config.py 文件中需要的内容:

正确:

task_track_started = True

同样正确:

CELERY_TASK_TRACK_STARTED = True

错误!:

CELERY_TRACK_STARTED = True

我只花了 2 个小时才弄明白。希望这在不久的将来能为某人服务

关于python - AsyncResult(task_id) 即使在任务开始后也返回 "PENDING"状态,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24518054/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com