W projekcie próbuję odpytać task.state długo działającego zadania i zaktualizować jego stan pracy. Działało to w fazie rozwoju, ale nie zadziała, gdy przeniesię projekt na serwer produkcyjny. Ciągle otrzymywałem "OCZEKUJĄCY", nawet jeśli widzę, że zadanie rozpoczęło się na kwiatku. Jednak nadal mogę uzyskać zaktualizowane wyniki po zakończeniu zadania, które po uruchomieniu task.state == "SUCCESS". Używam Pythona 2.6, Django 1.6 i Celery 3.1 w produkcji, backend wyniku AMQP.AsyncResult (id_zadania) zwraca stan "OCZEKUJĄCY", nawet po uruchomieniu zadania.
@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')
na innej notatce, kwiat zawsze pokazuje status pracowników w trybie offline, ale status zadań był prawidłowy. Podczas używania zdarzeń selera 3.1.12 (Cipater), pokazuje on prawidłowy status pracownika.
Miałem "CELERY_TRACK_STARTED = True" w moim settings.py i ustawiłem celeryconfig.py z os.environ.setdefault ("DJANGO_SETTINGS_MODULE", "mysite.settings"). Problem polega na tym, że AsyncResult (task_id) .state zawsze zwraca status "PENDING", więc mój szablon nie może zostać zaktualizowany do "STARTED" po uruchomieniu zadania. Jednak zarówno monitorowanie zdarzeń kwiatowych, jak i selera pokazało, że zadanie rozpoczęło się prawidłowo. Bardzo zdezorientowany. – user3795121
Czy możesz uruchomić terminal, na którym działa twój prodution 'seler przeglądaj conf --app twoja_nazwa_użytkownika ', aby sprawdzić, czy ustawienie' CELERY_TRACK_STARTED' było dobrze załadowane? –
To jest problem! app.conf nie jest aktualizowany, dopóki nie ustawię go jawnie w tasks.py. Domyślam się, że os.environ.setdefault ("DJANGO_SETTINGS_MODULE", "mysite.settings") nie działa. Nadal nie mam pojęcia, dlaczego tak się stało. – user3795121