Sou*_*ane 5 python django asynchronous celery python-3.x
我有一个主芹菜任务,它启动多个子任务(数千)执行多个操作(每个子任务相同的操作).
我要的是,从主芹菜任务追踪实时的每个动作,多少完成多少都未能对每个子任务.
综上所述!
所以我需要从主要任务中了解子任务的实时进度.
我正在开发的应用程序是使用Django/angularJs,我需要异步显示在前端的实时进展.
我是芹菜的新手,我很困惑,不知道如何实现这一点.
任何帮助,将不胜感激.提前致谢.
我以前做过这个,有太多的代码要放在这里,所以请允许我简单地把大纲,因为我相信你可以照顾实际的实现和配置:
首先,Django是同步的,因此用它实时做任何事都不容易.
所以我使用了socket.io进程.你可以说它只是一个微服务,它只监听Redis支持的"通道",并向监听给定通道的浏览器客户端发送通知.
我做了这个,所以每个频道都用Celery任务ID标识.因此,当我从浏览器触发芹菜任务时,我获取任务ID,保留它并开始通过该通道从socket.io监听事件.
按时间顺序,它看起来像这样:
至于任务状态的实际更新,我只是这样做,以便Celery任务在其代码中,在Redis上发送一条消息,例如{'done': 2, 'total_to_be_done': 10}(表示经历了10个步骤中的2个步骤的任务, 20%的进展,我更喜欢发送两个数字以获得更好的UI/UX)
import redis
redis_pub = redis.StrictRedis()
channel = 'task:<task_id>:progress'
redis_pub.publish(channel, json.dumps({'done': 2, 'total_to_be_done': 10}))
Run Code Online (Sandbox Code Playgroud)
您可以使用或至少从像angular-socket-io这样的库中获得灵感
| 归档时间: |
|
| 查看次数: |
3976 次 |
| 最近记录: |