在项目中,我尝试轮询一个长时间运行的任务的task.state并更新其运行状态.它在开发中起作用,但是当我在生产服务器上移动项目时它不起作用.即使我可以看到任务开始在花上,我仍然不停地'待命'.但是,当任务完成时,我仍然可以更新结果,当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')
在另一个注释中,花总是显示工人的状态离线,但任务状态是正确的.使用芹菜事件3.1.12(Cipater)时,它显示正确的工作人员状态.