Mostrar datos transmitidos desde una vista del Frasco mientras se actualiza

Tengo una vista que genera datos y los transmite en tiempo real. No puedo averiguar cómo enviar estos datos a una variable que puedo usar en mi plantilla HTML. Mi solución actual simplemente envía los datos a una página en blanco cuando llega, lo que funciona, pero quiero incluirlos en una página más grande con formato. ¿Cómo actualizo, formateo y visualizo los datos a medida que se transmiten a la página?

import flask import time, math app = flask.Flask(__name__) @app.route('/') def index(): def inner(): # simulate a long process to watch for i in range(500): j = math.sqrt(i) time.sleep(1) # this value should be inserted into an HTML template yield str(i) + '
\n' return flask.Response(inner(), mimetype='text/html') app.run(debug=True)

Puede transmitir datos en una respuesta, pero no puede actualizar dinámicamente una plantilla de la forma que describe. La plantilla se representa una vez en el lado del servidor y luego se envía al cliente. Deberá usar JavaScript para leer la respuesta transmitida y generar los datos en el lado del cliente.

Utilice XMLHttpRequest para realizar una solicitud al punto final que transmitirá los datos. Luego leer periódicamente de la secuencia hasta que se hace.

Este ejemplo asume un formato de mensaje muy simple: una sola línea de datos, seguida de una nueva línea. Por supuesto, puede hacer el análisis tan complicado como desee, siempre que haya una forma de identificar cada mensaje. Por ejemplo, podría devolver un objeto JSON y decodificarlo en el cliente.

 from time import sleep from flask import Flask, render_template from math import sqrt app = Flask(__name__) @app.route('/') def index(): # render the template (below) that will use JavaScript to read the stream return render_template('index.html') @app.route('/stream_sqrt') def stream(): def generate(): for i in range(500): yield '{}\n'.format(sqrt(i)) sleep(1) return app.response_class(generate(), mimetype='text/plain') app.run() 
 

This is the latest output:

This is all the output: