如何为用户提供有关Celery任务执行状态的持续通知?

时间:2018-06-07 22:46:27

标签: python django asynchronous django-views celery

在收到用户的请求后,我在views.py内部以这种方式将我的项目与celery集成

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()的{​​{1}}目录中的第三个python文件运行函数uploadapp/。 让我们假设main.py是一个耗费时间的资源繁重的过程(如文件解析)。当我将它与芹菜融为一体时,它现在完全异步工作,这对我有好处。所以,任务开始 - >芹菜加工 - >它完成然后芹菜设置状态为完成。我可以使用aunit()查看。

但我想做的是,我想在Celery完成后端处理并将状态设置为SUCCESS时,通过django UI flower通知正在使用我的应用的用户。 / p>

现在,我知道如果可能:

1。)我经常请求状态并看到它返回SUCCESS。

我如何通过芹菜这样做。如何从Your Task is done processing查询Celery Task状态并仅使用celery的python模块异步通知用户?

1 个答案:

答案 0 :(得分:0)

您需要一个实时机制。我会建议Firebase。在celery任务结束时使用boolean = True更新用户标识的Firebase实时数据库字段。实现一个javascript函数来监听Firebase数据库user_id对象的变化 - >更新UI