Énoncé du problème :
Bien que FastAPI fournisse des fonctionnalités parallèles, l'API les appels effectués simultanément via plusieurs onglets du navigateur sont traités séquentiellement plutôt qu'en parallèle. Ce comportement se produit lorsque les points de terminaison sont définis avec def plutôt qu'async def.
Analyse et solution :
FastAPI utilise un pool de threads externe pour gérer les points de terminaison définis avec def. Lorsqu'un tel point de terminaison reçoit une requête, FastAPI l'exécute dans un thread distinct du pool de threads. Cependant, une seule requête peut être traitée à la fois, ce qui entraîne un traitement séquentiel des requêtes plutôt qu'un véritable parallélisme.
En revanche, les points de terminaison définis avec async def s'exécutent directement dans la boucle d'événements principale, permettant un véritable traitement parallèle des requêtes. . En effet, les appels d'attente au sein des points de terminaison def asynchrones cèdent la place à d'autres tâches dans la boucle d'événements en attendant des opérations asynchrones.
Pour résoudre le problème, assurez-vous que les points de terminaison qui ne nécessitent pas de blocage des opérations liées aux E/S sont définis. avec async def pour tirer parti des capacités parallèles de FastAPI. Voici un exemple de point de terminaison pouvant s'exécuter en parallèle :
@app.get("/ping") async def ping(request: Request): print("Hello") await asyncio.sleep(5) print("bye") return {"ping": "pong!"}
Informations 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!