flask 实现 web 页面展示异步任务的执行过程

2019-10-23 13:02:39 +08:00
 zackary

小弟不才,目前手上有个运维的项目在自己做,功能就是 web 上请求执行一个异步任务,使用 celery 作为任务队列管理并执行。目前需求是如何在 web 界面上展示这些任务执行过程,任务执行的时候会写 log 日志,我的想法是后台直接读对应的 log 日志,然后使用 websocket 推送到前端,这部分有没有什么推荐的方案?还要能支持多客户端请求查看不同任务情况

5344 次点击
所在节点    Python
20 条回复
brucedone
2019-10-23 13:07:11 +08:00
socketio , 不同的任务发送到不同的频道就可以啦
zackary
2019-10-23 13:20:29 +08:00
@brucedone 我试过这个,不同任务发送到不同的 room 里是可以,但是多个人一起用就有问题,就会其中一个人 web 上会显示,其他人查看其他任务的时候就会等待很久才会显示,我尝试用多线程,但是 python 多线程又毕竟蛋疼
zhijiansha
2019-10-23 14:39:31 +08:00
前端定时刷新查询任务状态的接口?
yuyang
2019-10-23 14:55:21 +08:00
用 flask-sockets 搞过类似的项目,感觉还行
ClericPy
2019-10-23 15:11:46 +08:00
以前挂在 supervisor 上的时候, 默认的 WEB UI 那个用 Unix socket 实现的倒是可以看, 中文友好问题得自己配置点东西
后来挂在 systemd 上以后, 用 Cockpit 看部分日志, 不过和你说的不太一样
然后工作时候是托管在阿里云日志里了... 也不是你想要的...

总而言之, Google 搜关键词吧: Python realtime log web ui
NaVient
2019-10-23 15:13:34 +08:00
看一看大项目的实现,jenkins 是通过轮询 接口+标志位实现的日志实时刷新添加,Python 那 Websocket 的并发实在不够看,建议采用 jenkins 的实现方式
learnshare
2019-10-23 15:16:04 +08:00
前端轮询就可以了,后端只负责记录进度状态,前端谁查谁看结果
zackary
2019-10-23 17:11:31 +08:00
@zhijiansha 考虑过前端轮循,打算将任务运行过程保存到 redis,然后再前端轮循,就是不知道有没有更好的方案
zackary
2019-10-23 17:14:38 +08:00
@learnshare 看来这种是比较合适的了,就是后端记录任务日志采用哪种方式比较合理,异步任务执行的时候只会写 log,后端读取日志然后存入 redis 供前端轮循?
marco25
2019-10-23 17:20:27 +08:00
@zackary fluentd 读取日志,自己写下配置,很简单
kaneg
2019-10-23 20:25:47 +08:00
之前做过一个类似的功能,是启动一个子进程 tail -f 来实现的
xuxueli
2019-10-23 20:43:25 +08:00
你这个功能,XXL-JOB 已经实现了,实时查看任务滚动日志,可以参考下。

http://www.xuxueli.com/xxl-job/
zackary
2019-10-23 23:50:09 +08:00
@kaneg 启子进程,那不是每一个客户端请求,就要启一个子进程 tail -f 了?
zackary
2019-10-23 23:51:24 +08:00
@xuxueli 这个是很不错,可惜是 java 的,有 python 的类似项目吗?谢啦
CallMeReznov
2019-10-24 00:37:56 +08:00
@zackary #14 他里面有 PYTHON 的模式啊 还有 SHELL 的 甚至还有 NODE 的
kaneg
2019-10-24 08:10:52 +08:00
@zackary 是的,主要是内部项目,访问量不大,所以不需要考虑性能问题。
37Y37
2019-10-24 09:26:00 +08:00
flush 不熟悉,django 的看看
37Y37
2019-10-24 09:26:19 +08:00
zackary
2019-10-24 09:51:24 +08:00
@37Y37 谢啦,我学习一下
sakurazensen
2019-10-24 23:33:58 +08:00
学习学习

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/612070

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX