Wie kann man Streaming-Antworten in FastAPI effektiv verarbeiten?

Linda Hamilton
Freigeben: 2024-11-08 15:54:02
Original
365 Leute haben es durchsucht

How to Handle Streaming Responses Effectively in FastAPI?

Verarbeitung von Streaming-Antworten mit FastAPI

FastAPI stellt die StreamingResponse-Klasse bereit, um Daten während API-Aufrufen an Clients zu streamen. Während diese Funktionalität für das nicht blockierende Streaming von Daten gedacht ist, können Probleme auftreten, wenn eine Generatorfunktion mit blockierenden Vorgängen oder unsachgemäßer Verwendung verwendet wird.

Erweiterte Reaktion für Streaming-Daten

Um den Erfolg sicherzustellen Beachten Sie beim Streamen Folgendes:

  • GET-Anfrage: Verwenden Sie GET-Anfragen anstelle von POST zum Abrufen von Daten.
  • Sichere Anmeldeinformationen: Vermeiden Senden von Anmeldeinformationen über die Abfragezeichenfolge; Verwenden Sie stattdessen Header oder Cookies.
  • Nicht blockierende Operationen: Definieren Sie Generatorfunktionen als def (nicht asynchrone def), wenn sie blockierende Operationen enthalten. Alternativ können Sie async def mit asynchronen Blockierungsvorgängen verwenden.
  • Geeigneter Medientyp: Geben Sie anstelle von Text einen anderen Medientyp für die Antwort an (z. B. application/json oder text/event-stream). /plain, oder deaktivieren Sie MIME-Sniffing, indem Sie den X-Content-Type-Options-Header auf nosniff setzen. Dadurch wird sichergestellt, dass Browser die Antwort nicht puffern, sodass Daten in Echtzeit gestreamt werden können.

Beispielimplementierung

Betrachten Sie den folgenden Python-Code:

# app.py
from fastapi import FastAPI, StreamingResponse
from fastapi.responses import StreamingResponse
import asyncio

app = FastAPI()

async def fake_data_streamer():
    for i in range(10):
        yield b'some fake data\n\n'
        await asyncio.sleep(0.5)

@app.get('/')
async def main():
    return StreamingResponse(fake_data_streamer(), media_type='text/event-stream')
    # or, use:
    '''
    headers = {'X-Content-Type-Options': 'nosniff'}
    return StreamingResponse(fake_data_streamer(), headers=headers, media_type='text/plain')
    '''

# test.py (using httpx)
import httpx

url = 'http://127.0.0.1:8000/'

with httpx.stream('GET', url) as r:
    for chunk in r.iter_raw():  # or, for line in r.iter_lines():
        print(chunk)
Nach dem Login kopieren

Dieser Code zeigt, wie man Daten von einer Generatorfunktion in einer FastAPI-Anwendung streamt und sie mithilfe der httpx-Bibliothek nutzt.

Das obige ist der detaillierte Inhalt vonWie kann man Streaming-Antworten in FastAPI effektiv verarbeiten?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Quelle:php.cn
Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
Neueste Artikel des Autors
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage