https://d226lax1qjow5r.cloudfront.net/blog/blogposts/how-pythons-wsgi-vs-asgi-is-like-baking-a-cake/flask-vs-fastapi_2.png

L'opposition entre WSGI et ASGI de Python, c'est comme préparer un gâteau

Publié le November 16, 2021

Temps de lecture : 4 minutes

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.

Visual of the flow of the interface being used with a laptop at the start and an arrow pointing to a web server pointing to a WSGI or ASGI to a web applicationWSGI 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 smooth

Ainsi, 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.

Three horizontal bars labeled A, B, and C, arranged diagonally downward from left to right. Bar A is magenta and positioned at the top left. Bar B is light blue and placed slightly lower and to the right of A. Bar C is orange, the longest of the three, located at the bottom right. Each bar has its corresponding label above it in magenta text.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 done

Au 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.

Three horizontal bars labeled A, B, and C, stacked vertically. Bar A is magenta and the longest, starting furthest to the left. Bar B is light blue and shorter, positioned slightly to the right of A. Bar C is orange and wider than B, starting further right than both A and B. Each bar has its label (A, B, C) above or beside it in magenta text.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 ?

Restez connecté et tenez-vous au courant des dernières nouvelles, astuces et événements concernant les développeurs.

Partager:

https://a.storyblok.com/f/270183/400x401/df70d85a84/tonya-sims-1.png
Tonya SimsAnciens de Vonage

Tonya est une ancienne conseillère des développeurs Python chez Vonage.