Ответ 1
Используйте представление "Флажок" для непрерывного чтения из файла навсегда и потока ответа. Используйте JavaScript для чтения из потока и обновления страницы. Этот пример отправляет весь файл, вы можете усечь его в какой-то момент, чтобы сохранить пропускную способность и память. Этот пример спит между чтениями, чтобы уменьшить нагрузку процессора из бесконечного цикла и разрешить другим потокам более активное время.
from time import sleep
from flask import Flask, render_template
app = 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>
Это почти то же самое, что и этот ответ, в котором описывается, как передавать и анализировать сообщения, хотя чтение из внешнего файла навсегда было достаточно новым, чтобы быть его собственным ответом. Код здесь проще, потому что мы не заботимся о разборе сообщений или прекращении потока, просто навсегда сохраняя файл.