实时跟踪Celery任务

实时跟踪Celery任务,第1张

实时跟踪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之类的库中获得启发



欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/zaji/5630966.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-12-15
下一篇 2022-12-15

发表评论

登录后才能评论

评论列表(0条)

保存