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 · 5320 次点击
    这是一个创建于 1637 天前的主题,其中的信息可能已经有所发展或是发生改变。

    小弟不才,目前手上有个运维的项目在自己做,功能就是 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 多线程又毕竟蛋疼
    zhijiansha
        3
    zhijiansha  
       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   ·   我们的愿景   ·   实用小工具   ·   5539 人在线   最高记录 6543   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 28ms · UTC 08:57 · PVG 16:57 · LAX 01:57 · JFK 04:57
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.