


Comment puis-je éviter les erreurs « ConnectionClosed » lors de l'exécution de requêtes HTTP simultanées dans FastAPI à l'aide d'Uvicorn ?
Dec 12, 2024 pm 09:59 PMFaire des requêtes HTTP dans Uvicorn/FastAPI
Lors de la gestion des points de terminaison HTTP construits à l'aide de FastAPI et Uvicorn, il est courant de demander des données à des API externes. Cependant, lors du traitement de plusieurs requêtes simultanées, des erreurs telles que « Impossible de gérer le type d'événement ConnectionClosed lorsque role=SERVER et state=SEND_RESPONSE » peuvent survenir. Cela se produit parce que la bibliothèque client HTTP par défaut, « requests », n'est pas entièrement thread-safe lorsqu'elle est utilisée dans un tel environnement simultané.
Pour résoudre ce problème, envisagez d'implémenter la bibliothèque client HTTP alternative appelée httpx. Il propose une API asynchrone qui permet d'éviter les problèmes de sécurité des threads dans FastAPI. L'exemple ci-dessous montre comment utiliser httpx dans FastAPI :
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()))
En utilisant l'API asynchrone de httpx, vous pouvez gérer plus efficacement les requêtes HTTP dans FastAPI tout en maintenant la sécurité des threads. Vous pouvez personnaliser davantage la taille du pool de connexions à l'aide de l'argument mot-clé « limites » sur l'objet Client.
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Article chaud

Outils chauds Tags

Article chaud

Tags d'article chaud

Bloc-notes++7.3.1
Éditeur de code facile à utiliser et gratuit

SublimeText3 version chinoise
Version chinoise, très simple à utiliser

Envoyer Studio 13.0.1
Puissant environnement de développement intégré PHP

Dreamweaver CS6
Outils de développement Web visuel

SublimeText3 version Mac
Logiciel d'édition de code au niveau de Dieu (SublimeText3)

Sujets chauds

Comment utiliser la belle soupe pour analyser HTML?

Comment utiliser Python pour trouver la distribution ZIPF d'un fichier texte

Comment travailler avec des documents PDF à l'aide de Python

Comment se cacher en utilisant Redis dans les applications Django

Comment effectuer l'apprentissage en profondeur avec TensorFlow ou Pytorch?

Comment implémenter votre propre structure de données dans Python

Sérialisation et désérialisation des objets Python: partie 1
