首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >芹菜任务的实时进度跟踪

芹菜任务的实时进度跟踪
EN

Stack Overflow用户
提问于 2016-02-16 16:20:00
回答 1查看 9.3K关注 0票数 5

我有一个主要的芹菜任务,它启动多个子任务(数千)执行多个操作(每个子任务的动作相同)。

我想要的是,从主要的芹菜任务到实时跟踪每一次行动,完成了多少次,每个子任务有多少次失败。

总结一下!

  • 主要任务:接收对象列表,以及每个对象要执行的操作列表。
  • 对于每个对象,将启动一个子任务来执行对象的操作。
  • 当所有子任务都完成时,主任务就完成了。

所以我需要从主要任务中知道子任务的实时进度。

我正在开发的应用程序使用django/angularJs,我需要在前端异步显示实时进度。

我对芹菜很陌生,我很困惑,不知道该如何实施。

任何帮助都将不胜感激。提前谢谢。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2016-02-16 16:48:02

我以前已经这样做过了,这里有太多的代码要放在这里,所以请允许我简单地描述一下大纲,因为我相信您可以处理实际的实现和配置:

基于Socket.IO的微服务将实时事件发送到浏览器

首先,Django是同步的,所以使用它做任何事情都不容易。

因此,我求助于socket.io过程。您可以说这是一个微服务,它只侦听由Redis支持的“通道”,并将通知发送到侦听给定频道的浏览器客户端。

芹菜-> -> Socket.io ->浏览器

因此,当我从浏览器中发射芹菜任务时,我会得到任务ID,并保留它,并开始通过该通道监听来自socket.io的事件。

按时间顺序排列如下:

  • 发射芹菜任务,拿到身份证
  • 将ID保存在客户端应用程序中,打开socket.io频道收听更新信息
  • 芹菜任务向Redis发送消息,这将触发socket.io事件。
  • Socket.io将消息实时中继到浏览器。

汇报进展情况

至于任务状态的实际更新,我只是让芹菜任务在其代码中用类似于{'done': 2, 'total_to_be_done': 10}的内容在Redis上发送一条消息(为了表示一个任务完成了10步中的2步,进度为20%,我更愿意同时发送两个数字以获得更好的UI/UX)。

代码语言:javascript
复制
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集成

您可以使用或至少从像角套接字这样的库中获得一些灵感。

票数 9
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/35437668

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档