Django celery получает статус задачи с помощью Ajax

Я использую сельдерей 2.5.3 и сельдерей django -2.5.5. И я использую mysql в качестве брокера.

Вот сценарий, когда пользователь запрашивает задание, которое я ставлю в очередь на работника, который получает данные с другого сайта. И это может занять несколько минут в зависимости от размера данных. Как только задание запущено, мы должны показать изображение загрузчика. И когда рабочий закончит загрузку данных (, которые будут в формате html ), я должен заменить изображение загрузчика полученными данными.

Причина, по которой мы используем сельдерей, заключается в том, что иногда скрипту требуется более 30 секунд для завершения и тайм-аута.

В настоящее время я планирую использовать вызов ajax для проверки статуса задания, и эта функция будет использоваться через фиксированные промежутки времени.

Я рассмотрел несколько вопросов, и вот что я придумал

Для запуска воркера я использую этот код

def testCelery(request):
   result=testadd.apply_async()
   return HttpResponse(str(result.task_id))

Это вернет идентификатор задачи _на сторону клиента, и с помощью ajax я отправлю запрос на сервер, чтобы проверить, завершено ли задание или нет

def getStat(request,task_id):
      res = AsyncResult(task_id)
      s=res.ready()
      if s==True:
         return HttpResponse(str(res.get()))
      else:
         return HttpResponse(str(s))

Я не уверен, что это правильный метод и как он будет вести себя в сценарии реального времени.

Пожалуйста посоветуй.

РЕДАКТИРОВАТЬ :с помощью представления djcelery для проверки статуса

Хорошо, я изменил свой код, как предложил Бруно, и теперь он выглядит как

from djcelery import views as celery_views
def getStat(request,task_id):
    return celery_views.is_task_successful(request, task_id)

И вроде работает. И все еще используя вызов ajax с идентификатором задачи _для получения статуса.

6
задан marc_s 5 January 2017 в 06:18
поделиться