


Gestion des requêtes HTTP en aval dans Uvicorn/FastAPI
Lors de la création d'un point de terminaison d'API à l'aide de FastAPI/Uvicorn, il est courant d'effectuer des requêtes HTTP en aval. Cependant, lors du traitement de plusieurs requêtes simultanées, les développeurs peuvent rencontrer une erreur :
H11._util.LocalProtocolError: can't handle event type ConnectionClosed when role=SERVER and state=SEND_RESPONSE
Cette erreur se produit car la session de requête par défaut de FastAPI n'est pas entièrement thread-safe. Pour surmonter ce défi, nous devons adopter une approche alternative.
Utiliser Httpx pour les requêtes HTTP asynchrones
Une solution consiste à utiliser la bibliothèque httpx, qui fournit un API. Au lieu de request.Session(), nous pouvons utiliser httpx.AsyncClient(). Ce client permet des requêtes simultanées vers le même hôte, car la connexion TCP sous-jacente est réutilisée.
Dans FastAPI, nous pouvons définir notre gestionnaire de durée de vie pour initialiser l'AsyncClient au démarrage et le fermer à l'arrêt. Par exemple :
@asynccontextmanager async def lifespan(app: FastAPI): async with httpx.AsyncClient() as client: yield {'client': client} # Add the client to the app state
Dans nos points de terminaison, nous pouvons accéder au client en utilisant request.state.client. Nous pouvons faire une demande en aval comme suit :
@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))
Réponses en streaming ou sans streaming
Nous pouvons envoyer la réponse en aval au client de différentes manières. Si nous souhaitons diffuser la réponse, nous pouvons créer un StreamingResponse qui utilise un générateur pour parcourir de manière asynchrone les données de réponse. Sinon, nous pouvons utiliser r.json(), PlainTextResponse ou une réponse personnalisée.
Avantages de l'utilisation de Httpx
L'utilisation de httpx offre plusieurs avantages :
- API Async pour un traitement efficace des requêtes simultanées.
- Connexion persistante pool pour des performances améliorées.
- Contrôle de la taille du pool de connexions.
- Intégration facile avec les gestionnaires de durée de vie et les points de terminaison de FastAPI.
En tirant parti de httpx, les développeurs peuvent efficacement créer des liens en aval Requêtes HTTP au sein de leurs applications FastAPI/Uvicorn sans rencontrer de problèmes de sécurité des threads. Cela garantit un comportement API fiable et évolutif.
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!

La syntaxe de base pour le découpage de la liste Python est la liste [Démarrage: arrêt: étape]. 1.Start est le premier index d'élément inclus, 2.STOP est le premier indice d'élément exclu et 3.StEP détermine la taille de l'étape entre les éléments. Les tranches sont non seulement utilisées pour extraire les données, mais aussi pour modifier et inverser les listes.

ListesoutPerformarRaySin: 1) dynamicingizingandfrequentinSertions / Deletions, 2) StoringheteroGeneousData, and3) MemoryEfficiencyForsparsedata, butmayhaveslightperformanceCostSincertorations.

Toconvertapythonarraytoalist, usethelist () Constructororageneratorexpression.1) ImportTheArrayModuleandCreateArray.2) Uselist (Arr) ou [Xforxinarr] à Convertittoalist, considérant la performance et le domaine de l'émie-efficacité pour les étages.

ChooseArraySoverListsInpyThonforBetterperformanceAndmemeMoryEfficacitéInSpecificScenarios.1) LargenumericalDatasets: ArraySreduceDeMemoryUsage.2)

Dans Python, vous pouvez utiliser pour les boucles, énumérer et les compréhensions de liste pour traverser les listes; En Java, vous pouvez utiliser des boucles traditionnelles et améliorées pour les boucles pour traverser les tableaux. 1. Les méthodes de traversée de la liste Python incluent: pour la compréhension de la boucle, de l'énumération et de la liste. 2. Les méthodes de traversée du tableau Java comprennent: traditionnel pour la boucle et amélioré pour la boucle.

L'article traite de la nouvelle instruction "Match" de Python introduite dans la version 3.10, qui constitue un équivalent pour les instructions de commutation dans d'autres langues. Il améliore la lisibilité du code et offre des avantages de performance par rapport aux if-elif-el traditionnels

Les groupes d'exception dans Python 3.11 permettent de gérer plusieurs exceptions simultanément, améliorant la gestion des erreurs dans des scénarios simultanés et des opérations complexes.

Les annotations de fonction dans Python ajoutent des métadonnées aux fonctions pour la vérification de type, la documentation et la prise en charge de l'IDE. Ils améliorent la lisibilité du code, la maintenance et sont cruciaux dans le développement de l'API, la science des données et la création de bibliothèques.


Outils d'IA chauds

Undresser.AI Undress
Application basée sur l'IA pour créer des photos de nu réalistes

AI Clothes Remover
Outil d'IA en ligne pour supprimer les vêtements des photos.

Undress AI Tool
Images de déshabillage gratuites

Clothoff.io
Dissolvant de vêtements AI

Video Face Swap
Échangez les visages dans n'importe quelle vidéo sans effort grâce à notre outil d'échange de visage AI entièrement gratuit !

Article chaud

Outils chauds

Dreamweaver CS6
Outils de développement Web visuel

mPDF
mPDF est une bibliothèque PHP qui peut générer des fichiers PDF à partir de HTML encodé en UTF-8. L'auteur original, Ian Back, a écrit mPDF pour générer des fichiers PDF « à la volée » depuis son site Web et gérer différentes langues. Il est plus lent et produit des fichiers plus volumineux lors de l'utilisation de polices Unicode que les scripts originaux comme HTML2FPDF, mais prend en charge les styles CSS, etc. et présente de nombreuses améliorations. Prend en charge presque toutes les langues, y compris RTL (arabe et hébreu) et CJK (chinois, japonais et coréen). Prend en charge les éléments imbriqués au niveau du bloc (tels que P, DIV),

Adaptateur de serveur SAP NetWeaver pour Eclipse
Intégrez Eclipse au serveur d'applications SAP NetWeaver.

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

MinGW - GNU minimaliste pour Windows
Ce projet est en cours de migration vers osdn.net/projects/mingw, vous pouvez continuer à nous suivre là-bas. MinGW : un port Windows natif de GNU Compiler Collection (GCC), des bibliothèques d'importation et des fichiers d'en-tête librement distribuables pour la création d'applications Windows natives ; inclut des extensions du runtime MSVC pour prendre en charge la fonctionnalité C99. Tous les logiciels MinGW peuvent fonctionner sur les plates-formes Windows 64 bits.
