V2EX = way to explore
V2EX 是一个关于分享和探索的地方
Sign Up Now
For Existing Member  Sign In
推荐学习书目
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 · Oct 23, 2019 · 6395 views
    This topic created in 2382 days ago, the information mentioned may be changed or developed.

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

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

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

    http://www.xuxueli.com/xxl-job/
    zackary
        13
    zackary  
    OP
       Oct 23, 2019
    @kaneg 启子进程,那不是每一个客户端请求,就要启一个子进程 tail -f 了?
    zackary
        14
    zackary  
    OP
       Oct 23, 2019
    @xuxueli 这个是很不错,可惜是 java 的,有 python 的类似项目吗?谢啦
    CallMeReznov
        15
    CallMeReznov  
       Oct 24, 2019
    @zackary #14 他里面有 PYTHON 的模式啊 还有 SHELL 的 甚至还有 NODE 的
    kaneg
        16
    kaneg  
       Oct 24, 2019 via iPhone
    @zackary 是的,主要是内部项目,访问量不大,所以不需要考虑性能问题。
    37Y37
        17
    37Y37  
       Oct 24, 2019
    flush 不熟悉,django 的看看
    zackary
        19
    zackary  
    OP
       Oct 24, 2019
    @37Y37 谢啦,我学习一下
    sakurazensen
        20
    sakurazensen  
       Oct 24, 2019 via Android
    学习学习
    About   ·   Help   ·   Advertise   ·   Blog   ·   API   ·   FAQ   ·   Solana   ·   2463 Online   Highest 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 63ms · UTC 05:55 · PVG 13:55 · LAX 22:55 · JFK 01:55
    ♥ Do have faith in what you're doing.