
Partager:
Tonya est une ancienne conseillère des développeurs Python chez Vonage.
L'opposition entre WSGI et ASGI de Python, c'est comme préparer un gâteau
Cet article a été mis à jour par Diana Pham en avril 2025
Introduction
Si vous n'avez jamais compris la différence entre WSGI et ASGI, vous n'êtes pas seul ! Prenons une analogie simple (et délicieuse) : la préparation d'un gâteau.
Que sont WSGI et ASGI ?
WSGI (Web Server Gateway Interface) et ASGI (Asynchronous Server Gateway Interface) définissent la manière dont un serveur web Python communique avec les applications web. Elles se situent entre le serveur web et votre framework Python, et traitent les requêtes entrantes. Cependant, elles traitent les requêtes de manière fondamentalement différente.
WSGI v. ASG Iinterface
WSGI : L'approche traditionnelle et synchrone
WSGI traite les demandes de manière synchronece qui signifie que chaque requête est traitée une à la fois, dans l'ordre. La requête suivante doit attendre que la précédente soit terminée avant d'être traitée.
Si vous avez utilisé Flaskvous avez rencontré WSGI - c'est le standard web de Python depuis des années. Cependant, ce traitement séquentiel peut ralentir les choses, en particulier lorsqu'il s'agit de traiter de nombreuses requêtes simultanément.
ASGI : L'approche moderne et asynchrone
ASGI, le successeur de WSGI, introduit la technologie asynchrone asynchrone. Cela signifie que plusieurs requêtes peuvent être traitées en même temps sans attendre l'une l'autre.
Vous avez peut-être entendu parler du nouveau framework web Python, FastAPI. Par défaut, il utilise ASGI, ce qui le rend extrêmement rapide. FastAPI est également un micro-cadre web qui présente de nombreux avantages, notamment la prise en charge immédiate du code asynchrone à l'aide des mots-clés Python async et await !
WSGI vs. ASGI : Analogie d'un gâteau
Pour comprendre la différence entre WSGI et ASGI, imaginez que vous préparez un gâteau d'anniversaire : vous faites cuire un gâteau et vous préparez le glaçage à partir de zéro. Il s'agit de deux tâches distinctes - ou, en termes web, de deux demandes.
WSGI : Une tâche à la fois (traitement synchrone)
Avec WSGI, chaque demande est traitée l'une après l'autre. Vous devez terminer entièrement la première tâche avant de passer à la suivante.
Request 1: Bake Cake
1. Mix the batter
2. Pour it into pans
3. Bake in the oven (30 min wait)
Request 2: Make Frosting
4. Mix butter and powdered sugar
5. Add vanilla and milk
6. Stir until smoothAinsi, si la cuisson prend 30 minutes, vous devrez attendre avant même de pouvoir commencer le glaçage. Il s'agit d'un traitement synchrone : les tâches ne se chevauchent pas, même si vous ne faites qu'attendre.
Synchronous requests
ASGI :Multitâche entre les demandes (traitement asynchrone)
Avec ASGI, vous pouvez traiter plusieurs requêtes à la fois. Si l'une d'entre elles est en attente (comme le gâteau dans le four), vous pouvez passer à l'autre et travailler sur une autre.
Request 1: Bake Cake
1. Mix the batter
2. Pour it into pans
3. Put it in the oven (starts baking)
→ Switch to Request 2 while the cake bakes…
Request 2: Make Frosting
4. Mix butter and powdered sugar
5. Add vanilla and milk
6. Stir until smooth
→ Return to Request 1 once the cake is doneAu lieu de rester inactif, vous faites un meilleur usage de votre temps. ASGI fonctionne de cette manière, en permettant aux tâches de s'interrompre et de reprendre, en gérant les E/S ou d'autres opérations longues sans bloquer les autres.
⚠ Remarque : Toutes les tâches ne peuvent pas être exécutées en même temps : certaines dépendent de l'exécution préalable d'autres tâches. Par exemple, vous ne pouvez pas faire cuire un gâteau avant d'avoir mélangé la pâte ! De même, dans les applications ASGI, certaines opérations (comme une requête de base de données ou la lecture d'un fichier) peuvent toujours nécessiter une exécution ordonnée.
Asynchronous requestsExemples de pseudocode Python
Code synchrone de type WSGI
def bake_cake(request):
mix_batter()
pour_into_pan()
bake_in_oven() # This blocks for a long time
return response
def make_frosting(request):
mix_ingredients()
stir_until_smooth()
return response
Ici, make_frosting() ne commencera même pas avant que bake_cake() finisse. Les demandes sont traitées une par une.
Code synchrone de type ASGI
async def bake_cake(request):
await mix_batter()
await pour_into_pan()
await bake_in_oven() # Can yield control here
return response
async def make_frosting(request):
await mix_ingredients()
await stir_until_smooth()
return response
Dans cette version asynchrone, pendant que bake_in_oven() attend, le serveur peut sauter par-dessus et exécuter make_frosting() au lieu de tourner au ralenti. C'est là toute la puissance de l'ASGI : un multitâche efficace et non bloquant.
La mise en boîte
WSGI, c'est comme faire un gâteau et ne rien faire pendant qu'il est au four. L'ASGI vous permet de préparer le glaçage pendant ce temps. Les deux ont leur utilité, mais si vous avez besoin d'applications web évolutives et performantes, il est préférable d'utiliser ASGI. d'applications web évolutives et performantes évolutives et performantes, capables de gérer efficacement de nombreuses tâches, l'ASGI est votre solution.
Vous avez une question ou souhaitez partager ce que vous construisez ?
Rejoignez la conversation sur le Communauté Vonage Slack
S'abonner à la Bulletin d'information du développeur
Suivez-nous sur X (anciennement Twitter) pour les mises à jour
Regardez les tutoriels sur notre chaîne YouTube
Connectez-vous avec nous sur la page Vonage Developer sur LinkedIn
Restez connecté et tenez-vous au courant des dernières nouvelles, astuces et événements concernant les développeurs.