python任务进度实时显示_python – 芹菜任务的实时进度跟踪

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

我想要的是,从主芹菜任务到每个动作的实时跟踪,完成了多少次以及每个子任务失败了多少次.

综上所述!

>主要任务:接收对象列表,以及要为每个对象执行的操作列表.

>对于每个对象,启动子任务以执行对象的操作.

>完成所有子任务后,主任务完成

所以我需要从主要任务中了解子任务的实时进度.

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

我是芹菜的新手,我很困惑,不知道如何实现这一点.

任何帮助,将不胜感激.

提前致谢.

解决方法:

我以前做过这个,有太多的代码要放在这里,所以请允许我简单地把大纲,因为我相信你可以照顾实际的实现和配置:

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

首先,Django是同步的,因此用它实时做任何事都不容易.

所以我使用了socket.io进程.你可以说它只是一个微服务,它只监听Redis支持的“通道”,并向监听给定通道的浏览器客户端发送通知.

芹菜 – > Redis – > Socket.io – >浏览器

我做了这个,所以每个频道都用Celery任务ID标识.因此,当我从浏览器触发芹菜任务时,我获取任务ID,保留它并开始通过该通道从socket.io监听事件.

按时间顺序,它看起来像这样:

>解雇Celery任务,获取ID

>将ID保留在客户端应用程序中,打开socket.io频道以侦听更新

> celery任务向Redis发送消息,这将触发socket.io事件

> Socket.io实时将消息中继到浏览器

报告进度

至于任务状态的实际更新,我只是这样做,以便Celery任务在其代码中,在Redis上发送一条消息,例如: {‘done’:2,’total_to_be_done’:10}(代表经历了10个步骤中的2个,20%进展的任务,我更喜欢发送两个数字以获得更好的UI / UX)

import redis

redis_pub = redis.StrictRedis()

channel = 'task::progress'

redis_pub.publish(channel, json.dumps({'done': 2, 'total_to_be_done': 10}))

查找使用Python here在Redis上发布消息的文档

AngularJS / Socket.io集成

您可以使用或至少从像angular-socket-io这样的图书馆获得灵感

标签:python,asynchronous,python-3-x,django,celery

来源: https://codeday.me/bug/20190519/1135679.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值