Heim > Backend-Entwicklung > Python-Tutorial > Wie kann ich „ConnectionClosed'-Fehler vermeiden, wenn ich gleichzeitige HTTP-Anfragen in FastAPI mit Uvicorn mache?

Wie kann ich „ConnectionClosed'-Fehler vermeiden, wenn ich gleichzeitige HTTP-Anfragen in FastAPI mit Uvicorn mache?

DDD
Freigeben: 2024-12-12 21:59:15
Original
501 Leute haben es durchsucht

How Can I Avoid

HTTP-Anfragen in Uvicorn/FastAPI stellen

Beim Umgang mit HTTP-Endpunkten, die mit FastAPI und Uvicorn erstellt wurden, ist es üblich, Daten von externen APIs anzufordern. Bei der Bearbeitung mehrerer gleichzeitiger Anfragen können jedoch Fehler wie „Ereignistyp ConnectionClosed kann nicht verarbeitet werden, wenn Rolle=SERVER und Status=SEND_RESPONSE“ auftreten. Dies liegt daran, dass die Standard-HTTP-Clientbibliothek „requests“ nicht vollständig threadsicher ist, wenn sie in einer solchen gleichzeitigen Umgebung verwendet wird.

Um dieses Problem zu beheben, sollten Sie die Implementierung der alternativen HTTP-Clientbibliothek namens httpx in Betracht ziehen. Es bietet eine asynchrone API, die hilft, Thread-Sicherheitsprobleme innerhalb von FastAPI zu vermeiden. Das folgende Beispiel zeigt, wie httpx in FastAPI verwendet wird:

from fastapi import FastAPI, Request, BackgroundTask
from fastapi.responses import StreamingResponse, Response
from contextlib import asynccontextmanager
import httpx

@asynccontextmanager
async def lifespan(app: FastAPI):
    async with httpx.AsyncClient() as client:
        yield {'client': client}

app = FastAPI(lifespan=lifespan)

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

Durch die Verwendung der asynchronen API von httpx können Sie HTTP-Anfragen innerhalb von FastAPI effizienter verarbeiten und gleichzeitig die Thread-Sicherheit gewährleisten. Sie können die Größe des Verbindungspools mithilfe des Schlüsselwortarguments „limits“ im Client-Objekt weiter anpassen.

Das obige ist der detaillierte Inhalt vonWie kann ich „ConnectionClosed'-Fehler vermeiden, wenn ich gleichzeitige HTTP-Anfragen in FastAPI mit Uvicorn mache?. 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
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage