Как обеспечить постоянное уведомление пользователя о статусе выполнения Задачи Celery? - PullRequest
0 голосов
/ 08 июня 2018

Я интегрировал свой проект с сельдереем таким образом, внутри 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?

1 Ответ

0 голосов
/ 11 июня 2018

Вам нужен механизм реального времени.Я бы предложил Firebase.Обновите поле базы данных реального времени Firebase для идентификатора пользователя, указав логическое значение = True в конце задачи сельдерея.Реализовать функцию javascript для прослушивания изменений объекта user_id базы данных Firebase -> обновить пользовательский интерфейс

...