Flask Stream Helpers API

stream_with_contextSe utiliza para mantener el contexto de la solicitud en funciones generadoras, de modo que objetos como request y session sigan siendo accesibles durante la respuesta de streaming.


stream_with_context

Parámetros Tipo Descripción
generator_or_function iterator / callable Función generadora u objeto invocable. Se utiliza como decorador o función envoltorio.

Dos usos

Uso Descripción
Modo decorador @stream_with_context decora la función generadora
Modo envoltorio stream_with_context(generator()) envuelve el generador ya creado

Consideraciones:Una vez que el cuerpo de la respuesta comienza a enviarse, ya no se pueden modificar los encabezados de respuesta. Si necesita acceder a session en el generador, debe acceder primero a session en la función de vista para activar la configuración del encabezado Vary: Cookie.


Ejemplo de código

Ejemplo

from flask import Flask, stream_with_context, request, Response

app = Flask(__name__)

@app.get("/stream")
def streamed_response():
    """Ejemplo de respuesta de streaming: enviar datos línea por línea"""
    @stream_with_context
    def generate():
        # Incluso después de que la respuesta haya comenzado a enviarse, aún se puede acceder a request
        yield f"data: Hello {request.args.get('name', 'EJEMPLO')}\n"
        for i in range(5):
            yield f"data: Line {i}\n"
        yield "data: [DONE]\n"

    return Response(generate(), mimetype="text/event-stream")

@app.get("/stream-wrap")
def stream_wrap():
    """Modo envoltorio"""
    def generate():
        yield "Hello "
        yield request.args.get("name", "World")
        yield "!"

    # Usar stream_with_context para envolver el generador ya creado
    return Response(stream_with_context(generate()))
Otras extensiones