我有一个主要的芹菜任务,它启动多个子任务(数千)执行多个操作(每个子任务的动作相同)。
我想要的是,从主要的芹菜任务到实时跟踪每一次行动,完成了多少次,每个子任务有多少次失败。
总结一下!
所以我需要从主要任务中知道子任务的实时进度。
我正在开发的应用程序使用django/angularJs,我需要在前端异步显示实时进度。
我对芹菜很陌生,我很困惑,不知道该如何实施。
任何帮助都将不胜感激。提前谢谢。
发布于 2016-02-16 16:48:02
我以前已经这样做过了,这里有太多的代码要放在这里,所以请允许我简单地描述一下大纲,因为我相信您可以处理实际的实现和配置:
基于Socket.IO的微服务将实时事件发送到浏览器
首先,Django是同步的,所以使用它做任何事情都不容易。
因此,我求助于socket.io过程。您可以说这是一个微服务,它只侦听由Redis支持的“通道”,并将通知发送到侦听给定频道的浏览器客户端。
芹菜-> -> Socket.io ->浏览器
因此,当我从浏览器中发射芹菜任务时,我会得到任务ID,并保留它,并开始通过该通道监听来自socket.io的事件。
按时间顺序排列如下:
汇报进展情况
至于任务状态的实际更新,我只是让芹菜任务在其代码中用类似于{'done': 2, 'total_to_be_done': 10}的内容在Redis上发送一条消息(为了表示一个任务完成了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}))查找使用Python发布消息的文档这里
AngularJS/Socket.io集成
您可以使用或至少从像角套接字这样的库中获得一些灵感。
https://stackoverflow.com/questions/35437668
复制相似问题