¿Cómo hacer que el matraz responda al cliente de forma asíncrona?

Flask es un servidor web de un solo hilo. Pero quiero hacer que no se bloquee cuando se maneja una solicitud que consume mucho tiempo.

Por ejemplo:

from flask import Flask import time import sys app = Flask(__name__) @app.route("/") def hello(): print "request" sys.stdout.flush() for _ in range(10000000): for j in range(10000000): i = 1 return "Hello World!" if __name__ == "__main__": app.run(debug=True) 

Quiero que cuando cada solicitud de cliente al servidor, siempre muestre “solicitud” en la consola inmediatamente. He intentado gunicorn y corro con gunicorn -k gevent -w 4 a:app pero sigue apareciendo sincrónico.

Este fragmento es un buen punto de partida.

También deberías mirar a Celery o RQ , son lo correcto para usar en proyectos más grandes, lo que es más importante, no son específicos de Flask.

También tienen integración Flask cada uno, Flask-Apio y Flask-RQ .

Creo que estás preguntando por algo llamado “streaming”. Para Flask, esto se puede lograr utilizando las funciones del generador y la palabra clave de yield .

La transmisión está cubierta con más detalle en la documentación oficial de Flask, eche un vistazo aquí .