Я использую сельдерей 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 с идентификатором задачи _для получения статуса.