Maison > développement back-end > Tutoriel Python > Comment httpx peut-il résoudre « h11._util.LocalProtocolError » lors de l'exécution de requêtes HTTP simultanées en aval dans FastAPI ?

Comment httpx peut-il résoudre « h11._util.LocalProtocolError » lors de l'exécution de requêtes HTTP simultanées en aval dans FastAPI ?

Barbara Streisand
Libérer: 2024-12-28 07:07:24
original
107 Les gens l'ont consulté

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

Faire des requêtes HTTP en aval avec Uvicorn/FastAPI

Problème :

Lors de l'envoi simultané de plusieurs requêtes vers un point de terminaison API hébergé sur Uvicorn/FastAPI, une erreur est rencontré :

h11._util.LocalProtocolError: can't handle event type ConnectionClosed when role=SERVER and state=SEND_RESPONSE
Copier après la connexion

Solution :

Pour résoudre ce problème et gérer efficacement les requêtes HTTP en aval dans FastAPI, envisagez d'utiliser httpx au lieu du bibliothèque de requêtes traditionnelles.

Pourquoi utiliser httpx ?

  • API asynchrone : httpx propose une API asynchrone, permettant une gestion asynchrone des requêtes HTTP(s).
  • Connexion Pooling : L'instance httpx.AsyncClient() réutilise les connexions TCP pour plusieurs requêtes adressées au même hôte, optimisant ainsi performances.
  • Prise en charge du flux : httpx fournit une gestion intégrée des réponses en streaming pour les requêtes entrantes et sortantes.

Exemple d'utilisation :

Le code suivant démontre l'utilisation de httpx dans une FastAPI point de terminaison :

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())
Copier après la connexion

Conseils supplémentaires :

  • Utilisez un gestionnaire de durée de vie pour initialiser et fermer le client httpx.
  • Envisagez d'utiliser le streaming réponses pour éviter la consommation de mémoire côté serveur.
  • Contrôlez la taille du pool de connexions avec l'argument de mot-clé limites sur le Client httpx.

En adoptant httpx et en mettant en œuvre les meilleures pratiques suggérées, vous pouvez gérer efficacement les requêtes HTTP en aval au sein de votre application Uvicorn/FastAPI.

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!

source:php.cn
Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn
Derniers articles par auteur
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal