flask 实现 web 页面展示异步任务的执行过程 - V2EX
V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
推荐学习书目
Learn Python the Hard Way
Python Sites
PyPI - Python Package Index
http://diveintopython.org/toc/index.html
Pocoo
值得关注的项目
PyPy
Celery
Jinja2
Read the Docs
gevent
pyenv
virtualenv
Stackless Python
Beautiful Soup
结巴中文分词
Green Unicorn
Sentry
Shovel
Pyflakes
pytest
Python 编程
pep8 Checker
Styles
PEP 8
Google Python Style Guide
Code Style from The Hitchhiker's Guide
zackary
V2EX    Python

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

  •  
  •   zackary 2019-10-23 13:02:39 +08:00 6003 次点击
    这是一个创建于 2181 天前的主题,其中的信息可能已经有所发展或是发生改变。

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

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

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

    http://www.xuxueli.com/xxl-job/
    zackary
        13
    zackary  
    OP
       2019-10-23 23:50:09 +08:00
    @kaneg 启子进程,那不是每一个客户端请求,就要启一个子进程 tail -f 了?
    zackary
        14
    zackary  
    OP
       2019-10-23 23:51:24 +08:00
    @xuxueli 这个是很不错,可惜是 java 的,有 python 的类似项目吗?谢啦
    CallMeReznov
        15
    CallMeReznov  
       2019-10-24 00:37:56 +08:00
    @zackary #14 他里面有 PYTHON 的模式啊 还有 SHELL 的 甚至还有 NODE 的
    kaneg
        16
    kaneg  
       2019-10-24 08:10:52 +08:00 via iPhone
    @zackary 是的,主要是内部项目,访问量不大,所以不需要考虑性能问题。
    37Y37
        17
    37Y37  
       2019-10-24 09:26:00 +08:00
    flush 不熟悉,django 的看看
    37Y37
        18
    37Y37  
       2019-10-24 09:26:19 +08:00
    zackary
        19
    zackary  
    OP
       2019-10-24 09:51:24 +08:00
    @37Y37 谢啦,我学习一下
    sakurazensen
        20
    sakurazensen  
       2019-10-24 23:33:58 +08:00 via Android
    学习学习
    关于     帮助文档     自助推广系统     博客     API     FAQ     Solana     943 人在线   最高记录 6679       Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 28ms UTC 22:58 PVG 06:58 LAX 15:58 JFK 18:58
    Do have faith in what you're doing.
    ubao snddm index pchome yahoo rakuten mypaper meadowduck bidyahoo youbao zxmzxm asda bnvcg cvbfg dfscv mmhjk xxddc yybgb zznbn ccubao uaitu acv GXCV ET GDG YH FG BCVB FJFH CBRE CBC GDG ET54 WRWR RWER WREW WRWER RWER SDG EW SF DSFSF fbbs ubao fhd dfg ewr dg df ewwr ewwr et ruyut utut dfg fgd gdfgt etg dfgt dfgd ert4 gd fgg wr 235 wer3 we vsdf sdf gdf ert xcv sdf rwer hfd dfg cvb rwf afb dfh jgh bmn lgh rty gfds cxv xcv xcs vdas fdf fgd cv sdf tert sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf shasha9178 shasha9178 shasha9178 shasha9178 shasha9178 liflif2 liflif2 liflif2 liflif2 liflif2 liblib3 liblib3 liblib3 liblib3 liblib3 zhazha444 zhazha444 zhazha444 zhazha444 zhazha444 dende5 dende denden denden2 denden21 fenfen9 fenf619 fen619 fenfe9 fe619 sdf sdf sdf sdf sdf zhazh90 zhazh0 zhaa50 zha90 zh590 zho zhoz zhozh zhozho zhozho2 lislis lls95 lili95 lils5 liss9 sdf0ty987 sdft876 sdft9876 sdf09876 sd0t9876 sdf0ty98 sdf0976 sdf0ty986 sdf0ty96 sdf0t76 sdf0876 df0ty98 sf0t876 sd0ty76 sdy76 sdf76 sdf0t76 sdf0ty9 sdf0ty98 sdf0ty987 sdf0ty98 sdf6676 sdf876 sd876 sd876 sdf6 sdf6 sdf9876 sdf0t sdf06 sdf0ty9776 sdf0ty9776 sdf0ty76 sdf8876 sdf0t sd6 sdf06 s688876 sd688 sdf86