Brian Carpio Brian Carpio - 4 months ago 37
Python Question

Flask Stream Output Of Function To Browser

Reading this page http://flask.pocoo.org/docs/patterns/streaming/ it seems like I might be able to do what I want, I have a simple url route that sends the output to json but I rather is stream the output:

@app.route('/')
def aws_api_route_puppet_apply(ip=None):
output = somemethod(var1,var2,var3)
return Response(json.dumps(output), mimetype='application/json')


Is there a way to stream the somemethod to the browser using just flask and HTML or do I need to use javascript?

Answer

Just like the documentation says, simply create a generator and yield each line you want to return to the client.

If output is 10 lines long, then the following will print each of the ten lines (as they're available) to the client:

@app.route('/')
def aws_api_route_puppet_apply(ip=None):
    def generate():
        for row in somemethod(var1,var2,var3):
            yield row + '\n'
    return Response(generate(),  mimetype='application/json')