Heim > Backend-Entwicklung > Python-Tutorial > Wie kann httpx „h11._util.LocalProtocolError' lösen, wenn in FastAPI gleichzeitige Downstream-HTTP-Anfragen gestellt werden?

Wie kann httpx „h11._util.LocalProtocolError' lösen, wenn in FastAPI gleichzeitige Downstream-HTTP-Anfragen gestellt werden?

Barbara Streisand
Freigeben: 2024-12-28 07:07:24
Original
107 Leute haben es durchsucht

How Can httpx Solve `h11._util.LocalProtocolError` When Making Concurrent Downstream HTTP Requests in FastAPI?

Downstream-HTTP-Anfragen mit Uvicorn/FastAPI stellen

Problem:

Beim gleichzeitigen Senden mehrerer Bei Anfragen an einen auf Uvicorn/FastAPI gehosteten API-Endpunkt wird ein Fehler angezeigt aufgetreten:

h11._util.LocalProtocolError: can't handle event type ConnectionClosed when role=SERVER and state=SEND_RESPONSE
Nach dem Login kopieren

Lösung:

Um dieses Problem zu beheben und nachgelagerte HTTP-Anfragen innerhalb von FastAPI effizient zu verarbeiten, sollten Sie httpx anstelle von verwenden traditionelle Anforderungsbibliothek.

Warum verwenden httpx?

  • Asynchrone API: httpx bietet eine asynchrone API, die eine asynchrone Verarbeitung von HTTP(s)-Anfragen ermöglicht.
  • Verbindung Pooling: Die httpx.AsyncClient()-Instanz verwendet TCP-Verbindungen für mehrere Anfragen an denselben Host wieder und optimiert so Leistung.
  • Stream-Unterstützung: httpx bietet integrierte Streaming-Antwortverarbeitung für eingehende und ausgehende Anfragen.

Beispielverwendung:

Der folgende Code demonstriert die Verwendung von httpx innerhalb einer FastAPI Endpunkt:

from fastapi import FastAPI, StreamingResponse
from httpx import AsyncClient

app = FastAPI()

@app.on_event("startup")
async def startup_event():
    app.state.client = AsyncClient()

@app.on_event("shutdown")
async def shutdown_event():
    await app.state.client.aclose()

@app.get("/")
async def home():
    client = app.state.client
    req = client.build_request("GET", "https://www.example.com/")
    r = await client.send(req, stream=True)
    return StreamingResponse(r.aiter_raw())
Nach dem Login kopieren

Zusätzliche Tipps:

  • Verwenden Sie einen Lifespan-Handler, um den httpx-Client zu initialisieren und zu schließen.
  • Erwägen Sie die Verwendung von Streaming Antworten, um Speicherverbrauch auf der Serverseite zu vermeiden.
  • Steuern Sie die Größe des Verbindungspools mit dem Schlüsselwortargument „limits“ auf der httpx-Client.

Durch die Einführung von httpx und die Implementierung der empfohlenen Best Practices können Sie nachgelagerte HTTP-Anfragen innerhalb Ihrer Uvicorn/FastAPI-Anwendung effektiv verarbeiten.

Das obige ist der detaillierte Inhalt vonWie kann httpx „h11._util.LocalProtocolError' lösen, wenn in FastAPI gleichzeitige Downstream-HTTP-Anfragen gestellt werden?. 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