使用Flask视图可以永久不断地从文件中读取数据并流式传输响应。使用Javascript从流中读取并更新页面。本示例发送了整个文件,您可能希望在某个时候截断该文件以节省带宽和内存。此示例在两次读取之间睡眠,以减少来自无限循环的cpu负载,并允许其他线程有更多活动时间。
from time import sleepfrom flask import Flask, render_templateapp = Flask(__name__)@app.route('/')def index(): return render_template('index.html')@app.route('/stream')def stream(): def generate(): with open('job.log') as f: while True: yield f.read() sleep(1) return app.response_class(generate(), mimetype='text/plain')app.run()
<pre id="output"></pre><script> var output = document.getElementById('output'); var xhr = new XMLHttpRequest(); xhr.open('GET', '{{ url_for('stream') }}'); xhr.send(); setInterval(function() { output.textContent = xhr.responseText; }, 1000);</script>这几乎与该答案相同,后者描述了如何流式传输和解析消息,尽管永远从外部文件中读取数据已经足够新颖,可以说是它自己的答案。这里的代码更简单,因为我们不在乎解析消息或结束流,而只是永久拖尾文件。



