Я интегрировал свой проект с сельдереем таким образом, внутри views.py
после получения запроса от пользователя
def upload(request):
if "POST" == request.method:
# save the file
task_parse.delay()
# continue
и в tasks.py
from __future__ import absolute_import
from celery import shared_task
from uploadapp.main import aunit
@shared_task
def task_parse():
aunit()
return True
Короче говоря,общая задача будет запускать функцию aunit()
из третьего файла python, расположенного в каталоге uploadapp/
с именем main.py
.Давайте предположим, что aunit()
является ресурсоемким процессом, который требует времени (например, при разборе файла).Поскольку я интегрировал это с сельдереем, он теперь работает полностью асинхронно, что хорошо для меня.Итак, запуск задачи -> Процесс сельдерея -> Затем он завершает, а статус сельдерея устанавливается на Окончание.Я могу просмотреть это, используя flower
.
Но я хочу уведомить пользователя, использующего мое приложение, также через пользовательский интерфейс django, что Your Task is done processing
, как только Celery завершит обработку на задней стороне и установит статус SUCCESS.
Теперь я знаю, что это возможно, если:
1.) Я постоянно запрашиваю СТАТУС и вижу, возвращает ли он УСПЕХ или нет.
Как мне это сделать черезСельдерей.Как вы можете запросить статус задачи Celery у вашего views.py
и асинхронно уведомить пользователя с помощью всего лишь модуля python из celery?