FastAPI exécute les appels d'API en série plutôt qu'en parallèle
Q : Pourquoi les appels d'API FastAPI s'exécutent-ils en série plutôt qu'en parallèle ?
A : Selon la documentation de FastAPI, lorsque vous utilisez def au lieu de async def pour définissez une fonction d'opération de chemin, elle est exécutée dans un pool de threads externe qui est ensuite attendu, au lieu d'être appelé directement. Ceci est fait pour éviter de bloquer le serveur.
Considérations supplémentaires pour l'exécution parallèle :
async def vs. def endpoints :
-
async def : Les fonctions s'exécutent directement dans l'événement boucle; seront traités simultanément, tant qu'ils attendent des opérations liées aux E/S non bloquantes.
-
def : Les fonctions s'exécutent dans un thread séparé à partir d'un pool de threads externe ; sera traité en série, à moins qu'il ne soit exécuté en dehors de la boucle d'événements.
Utilisation des opérations de blocage :
Si un point de terminaison de définition asynchrone contient une opération de blocage et n'attend pas sa réalisation, il bloquera la boucle des événements et les requêtes seront traitées en série.
Solutions :
- Définissez le point de terminaison avec une définition normale au lieu d'une définition asynchrone (s'il n'y a pas d'opérations attendues).
- Utilisez la fonction run_in_threadpool() de FastAPI pour exécuter des tâches de blocage dans un thread séparé.
- Utiliser loop.run_in_executor() ou asyncio.to_thread() d'asyncio pour exécuter des tâches de blocage dans un exécuteur ou un thread distinct.
Autres stratégies d'optimisation :
- Utilisez davantage de nœuds de calcul pour tirer parti des processeurs multicœurs.
- Envisagez d'utiliser Céleri ou AsyncIOScheduler pour des calculs en arrière-plan lourds.
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!