将大文件内容缓冲到 Flask 前端

问题描述 投票:0回答:1

我目前正在尝试找出如何解决使最终用户可以访问大文件的问题,使用 Flask 作为前端引擎。

为了更好地解释,这是我必须做的(并且做了):

  1. [完成]从多个文件(日志)中提取数据,每个文件大约需要 200mb。
  2. [完成] 转换并应用一些滤镜。
  3. [完成] 将每个(日志)文件存储在变量中,并完成步骤 2 中的所有操作。
  4. 使数据可供前端的最终用户使用,无需为前端的每个会话使用 SSH + tail -f。

我的问题是了解我可以使用哪些工具来显示 Flask 模板中的数据,并考虑到数据可能会发生变化(附加到步骤 3 中已保存的日志列表中)。

基本解释:我尝试从某些文件中读取实时数据,并使其可供任何前端用户访问,而不为前端的每个会话创建“ssh -c tail -f logfile.log”。

python python-3.x flask
1个回答
0
投票

如果需要避免 SSH 和 tail -f,可以使用 flask-socketio

Flask 后端

流日志更新:
from flask import Flask
from flask_socketio import SocketIO, emit
from time import sleep

app = Flask(__name__)
socketio = SocketIO(app)

@socketio.on('connect')
def stream_logs():
    def generate_logs():
        with open('file.log') as f:
            while True:
                line = f.readline()
                if line:
                    emit('log_update', line)
                else:
                    sleep(1)  # Avoid busy waiting
    socketio.start_background_task(generate_logs)

if __name__ == '__main__':
    socketio.run(app)

正面 (HTML)

接收并显示日志更新:
<script src="//cdn.socket.io/4.0.0/socket.io.min.js"></script>
<div id="log"></div>
<script>
    var socket = io();
    socket.on('log_update', msg => {
        document.getElementById('log').innerHTML += `<p>${msg}</p>`;
    });
</script>

这应该是将大文件实时传输到前端的最有效的方式。

© www.soinside.com 2019 - 2024. All rights reserved.