我以这种方式将我的项目与芹菜集成,在收到用户的请求后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
简而言之,共享任务将从位于名为main.py
的目录中的第三个 python 文件中运行uploadapp/
函数aunit()
。 假设aunit()
是一个需要时间的资源密集型过程(如文件解析(。当我将其与芹菜集成时,它现在完全异步工作,这对我来说很好。因此,任务开始 -> 芹菜进程 -> 它完成,然后芹菜将状态设置为完成。我可以使用flower
查看。
但我想做的是,我想通过 django UI 通知正在使用我的应用程序的用户,一旦 Celery 在背面完成处理并将状态设置为 SUCCESS,就会Your Task is done processing
。
现在,我知道这是可能的,如果:
1.(我不断请求状态,看看它是否返回成功。
我如何通过芹菜做到这一点。如何从views.py
查询芹菜任务状态,并仅使用芹菜的python模块异步通知用户?
你需要一个实时机制。我会建议Firebase。在芹菜任务结束时,将用户 ID 的 Firebase 实时数据库字段更新为布尔值 = True。实现一个 javascript 函数来监听 Firebase 数据库user_id对象更改 ->更新界面