Optimisation de la vitesse de récupération des données JSON dans FastAPI
Le retour lent d'une charge utile JSON importante à partir du point de terminaison GET de FastAPI est un problème récurrent. Lorsque vous utilisez json.dumps() pour transmettre des données à partir d'un fichier à l'aide de json.loads(), la réponse est considérablement retardée. Bien que les données de retour puissent être utilisées pour envoyer des données à l'utilisateur, existe-t-il une approche plus efficace ?
Problème :
Le pipeline de traitement transforme initialement les données en JSON à l'aide de to_json de pandas. (), puis le charge dans un dictionnaire avec json.loads() et le traduit enfin en JSON. Ce processus de conversion en plusieurs étapes introduit une latence importante.
Solution proposée :
Tout d'abord, il est crucial de reconnaître que FastAPI convertit les valeurs de retour en données compatibles JSON à l'aide de l'option jsonable_encoder, suivi d'une sérialisation à l'aide de la fonction json.dumps() standard de Python. Ce processus en deux étapes est connu pour être lent.
Option 1 : Utiliser des encodeurs JSON alternatifs
Envisagez d'utiliser des encodeurs JSON alternatifs comme orjson ou ujson. Ces encodeurs surpassent la combinaison par défaut jsonable_encoder et json.dumps().
Option 2 : Retour direct d'une réponse personnalisée
Pour des performances optimales, utilisez la classe APIRoute personnalisée et renvoyez une réponse objet. Cela contourne le processus de conversion JSON par défaut de FastAPI.
<code class="python">from fastapi.routing import APIRouter, APIRoute class TimedRoute(APIRoute): ... app = FastAPI() router = APIRouter(route_class=TimedRoute) @router.get("/custom-response") def get_data(): df = pd.read_parquet('data.parquet') return Response(df.to_json(orient="records"), media_type="application/json") app.include_router(router)</code>
Considérations supplémentaires :
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!