Maison >développement back-end >Tutoriel Python >Concurrent ou parallèle : comment FastAPI gère-t-il les requêtes ?
Requêtes simultanées ou parallèles dans FastAPI
Dans FastAPI, il existe une idée fausse courante sur la raison pour laquelle les points de terminaison de définition asynchrone n'exécutent pas toujours les requêtes dans parallèle. Ce comportement n'est pas dû à la conception de FastAPI, mais plutôt à la façon dont FastAPI utilise la programmation asynchrone.
Lors de l'utilisation de points de terminaison def, FastAPI les exécute de manière synchrone dans des threads séparés, permettant la concurrence. Cependant, les points de terminaison de définition asynchrone s'exécutent généralement directement dans la boucle d'événements, garantissant à la fois la concurrence et le parallélisme lorsque le code interagit avec les opérations d'E/S asynchrones.
Code synchrone ou asynchrone dans FastAPI
FastAPI prend en charge le code asynchrone via async def, ce qui permet de retransmettre le contrôle à la boucle d'événements à l'aide de wait. Cette fonctionnalité permet des opérations non bloquantes, telles que l'attente de données d'un client ou d'une réponse de base de données. Cependant, si une tâche synchrone, comme time.sleep(), est utilisée dans un point de terminaison def asynchrone, elle bloque la boucle d'événements et finalement le serveur, ce qui entraîne un traitement séquentiel des requêtes.
Pool de threads externe
Pour garantir que les tâches bloquantes n'entravent pas la boucle d'événements, FastAPI utilise un pool de threads externe, qui exécute les tâches définies avec def sur des threads séparés et les attend avant de reprendre l'exécution de la boucle d'événements. Cette approche permet d'obtenir la concurrence pour les points de terminaison def, même s'il ne s'agit pas d'une véritable parallélisation.
Bonnes pratiques
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!