Problème :
Récupération d'une quantité importante de données JSON à partir d'un Le point de terminaison FastAPI est sensiblement lent, nécessitant environ une minute. Les données sont initialement chargées à partir d'un fichier parquet à l'aide de json.loads() et filtrées avant d'être renvoyées. Recherche d'une approche plus rapide pour fournir les données.
Résolution :
Le temps de réponse lent provient de plusieurs conversions JSON dans la fonction parse_parquet(). FastAPI encode automatiquement la valeur renvoyée à l'aide de jsonable_encoder avant de la sérialiser avec json.dumps(), un processus qui prend du temps. Les encodeurs JSON externes comme orjson ou ujson offrent des améliorations potentielles de vitesse.
Cependant, la solution la plus efficace consiste à éviter les conversions JSON inutiles. Le code suivant utilise une classe APIRoute personnalisée pour activer les réponses JSON directes des pandas DataFrames :
<code class="python">from fastapi import APIRoute class TimedRoute(APIRoute): # Custom handler for capturing response time def get_route_handler(self): original_route_handler = super().get_route_handler() async def custom_route_handler(request): before = time.time() response = await original_route_handler(request) duration = time.time() - before response.headers["Response-Time"] = str(duration) print(f"route duration: {duration}") return response return custom_route_handler</code>
Ce code vous permet de comparer les temps de réponse de différentes méthodes de conversion de données. En utilisant un exemple de fichier parquet avec 160 000 lignes et 45 colonnes, les résultats suivants ont été obtenus :
Pour améliorer l'expérience utilisateur, envisagez de définir l'en-tête Content-Disposition avec le paramètre de pièce jointe et un nom de fichier pour lancer un téléchargement plutôt que d'afficher les données dans le navigateur. Cette approche contourne les contraintes du navigateur et accélère le processus.
De plus, Dask permet une gestion optimisée des grands ensembles de données, offrant des alternatives aux pandas. Des réponses en streaming ou asynchrones peuvent également être envisagées pour éviter les problèmes de mémoire lors de la gestion de volumes de données massifs.
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!