小弟不才,目前手上有个运维的项目在自己做,功能就是 web 上请求执行一个异步任务,使用 celery 作为任务队列管理并执行。目前需求是如何在 web 界面上展示这些任务执行过程,任务执行的时候会写 log 日志,我的想法是后台直接读对应的 log 日志,然后使用 websocket 推送到前端,这部分有没有什么推荐的方案?还要能支持多客户端请求查看不同任务情况
1
brucedone 2019-10-23 13:07:11 +08:00
socketio , 不同的任务发送到不同的频道就可以啦
|
2
zackary OP @brucedone 我试过这个,不同任务发送到不同的 room 里是可以,但是多个人一起用就有问题,就会其中一个人 web 上会显示,其他人查看其他任务的时候就会等待很久才会显示,我尝试用多线程,但是 python 多线程又毕竟蛋疼
|
3
zhijiansha 2019-10-23 14:39:31 +08:00 via iPhone
前端定时刷新查询任务状态的接口?
|
4
yuyang 2019-10-23 14:55:21 +08:00
用 flask-sockets 搞过类似的项目,感觉还行
|
5
ClericPy 2019-10-23 15:11:46 +08:00 1
以前挂在 supervisor 上的时候, 默认的 WEB UI 那个用 Unix socket 实现的倒是可以看, 中文友好问题得自己配置点东西
后来挂在 systemd 上以后, 用 Cockpit 看部分日志, 不过和你说的不太一样 然后工作时候是托管在阿里云日志里了... 也不是你想要的... 总而言之, Google 搜关键词吧: Python realtime log web ui |
6
NaVient 2019-10-23 15:13:34 +08:00 1
看一看大项目的实现,jenkins 是通过轮询 接口+标志位实现的日志实时刷新添加,Python 那 Websocket 的并发实在不够看,建议采用 jenkins 的实现方式
|
7
learnshare 2019-10-23 15:16:04 +08:00
前端轮询就可以了,后端只负责记录进度状态,前端谁查谁看结果
|
8
zackary OP @zhijiansha 考虑过前端轮循,打算将任务运行过程保存到 redis,然后再前端轮循,就是不知道有没有更好的方案
|
9
zackary OP @learnshare 看来这种是比较合适的了,就是后端记录任务日志采用哪种方式比较合理,异步任务执行的时候只会写 log,后端读取日志然后存入 redis 供前端轮循?
|
11
kaneg 2019-10-23 20:25:47 +08:00 via iPhone
之前做过一个类似的功能,是启动一个子进程 tail -f 来实现的
|
12
xuxueli 2019-10-23 20:43:25 +08:00 via Android 1
|
15
CallMeReznov 2019-10-24 00:37:56 +08:00
@zackary #14 他里面有 PYTHON 的模式啊 还有 SHELL 的 甚至还有 NODE 的
|
17
37Y37 2019-10-24 09:26:00 +08:00
flush 不熟悉,django 的看看
|
18
37Y37 2019-10-24 09:26:19 +08:00
|
20
sakurazensen 2019-10-24 23:33:58 +08:00 via Android
学习学习
|