栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 面试经验 > 面试问答

实时跟踪Celery任务

面试问答 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

实时跟踪Celery任务

之前我已经做过,这里要放太多代码,所以请允许我简单地提出大纲,因为我相信您可以照顾实际的实现和配置:

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

首先,Django是同步的,因此实时进行任何操作都不容易。

因此,我诉诸于socket.io进程。您可以说这是一个微服务,它仅侦听Redis支持的“通道”,并向侦听给定通道的浏览器客户端发送通知。

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

我做到了,因此每个频道都带有一个Celery任务ID。因此,当我从浏览器中启动一个celery任务时,我获得了任务ID,保留它并开始通过该通道监听socket.io中的事件。

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

  • 开除芹菜任务,获取ID
  • 将ID保留在您的客户端应用中,打开一个socket.io频道以监听更新
  • celery任务将消息发送到Redis,这将触发socket.io事件
  • Socket.io将消息实时中继到浏览器

报告进度

至于任务状态的实际更新,我只是这样做了,以使Celery任务在其代码内以类似方式

{'done': 2, 'total_to_be_done':10}
(例如,代表一个任务经过10个步骤中的2个, 20%的进度,我更喜欢同时发送这两个数字,以获得更好的UI / UX)

import redisredis_pub = redis.StrictRedis()channel = 'task:<task_id>:progress'redis_pub.publish(channel, json.dumps({'done': 2, 'total_to_be_done': 10}))

在此处查找有关使用Python在Redis上发布消息的文档

AngularJS / Socket.io集成

您可以使用或至少从诸如angular-socket-io之类的库中获得启发



转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/625081.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号