API des utilitaires de flux Flask

stream_with_contextUtilisé pour maintenir le contexte de la requête dans les fonctions génératrices, afin que des objets tels que request et session restent accessibles pendant les réponses en streaming.


stream_with_context

Paramètre Type Description
generator_or_function itérateur / appelable Une fonction génératrice ou un objet appelable. Utilisé comme décorateur ou fonction d'encapsulation.

Deux modes d'utilisation

Utilisation Description
Mode Décorateur @stream_with_context décore la fonction génératrice
Mode enveloppe stream_with_context(generator()) enveloppe un générateur déjà créé

Notes: Une fois que le corps de la réponse a commencé à être envoyé, les en-têtes de réponse ne peuvent plus être modifiés. Si le générateur doit accéder à la session, vous devez d'abord accéder à la session dans la fonction de vue pour déclencher la définition de l'en-tête Vary: Cookie.


Exemples de code

Exemple

from flask import Flask, stream_with_context, request, Response

app = Flask(__name__)

@app.get("/stream")
def streamed_response():
    """Exemple de réponse en streaming : envoyer les données ligne par ligne"""
    @stream_with_context
    def generate():
        # Même après que la réponse a commencé à être envoyée, request peut toujours être accessible
        yield f"data: Hello {request.args.get('name', 'EXAMPLE')}\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():
    """Mode wrapper"""
    def generate():
        yield "Hello "
        yield request.args.get("name", "World")
        yield "!"

    # Utiliser stream_with_context pour envelopper le générateur qui a déjà été créé
    return Response(stream_with_context(generate()))
autres extensions