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

El WSGI de Python frente al ASGI es como hornear un pastel

Publicado el November 16, 2021

Tiempo de lectura: 3 minutos

Este artículo ha sido actualizado por Diana Pham en abril de 2025

Introducción

Si alguna vez te has sentido confuso sobre la diferencia entre WSGI y ASGI, no eres el único. Vamos a explicarlo con una sencilla (y deliciosa) analogía: hornear un pastel.

¿Qué son WSGI y ASGI?

WSGI (Web Server Gateway Interface) y ASGI (Asynchronous Server Gateway Interface) definen cómo un servidor web Python se comunica con las aplicaciones web. Se sitúan entre el servidor web y tu framework Python, gestionando las peticiones entrantes. Sin embargo, manejan las peticiones de maneras fundamentalmente diferentes.

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: El enfoque sincrónico tradicional

WSGI procesa las peticiones de forma sincrónicalo que significa que cada petición se procesa de una en una, en orden. La siguiente petición debe esperar a que termine la anterior para poder ser procesada.

Si ha utilizado Flaskte habrás encontrado con WSGI, el estándar web de Python desde hace años. Sin embargo, este procesamiento secuencial puede ralentizar las cosas, especialmente cuando se manejan muchas peticiones simultáneamente.

ASGI: El enfoque moderno y asíncrono

ASGI, el sucesor de WSGI, introduce asíncrono asíncrono. Esto significa que varias peticiones pueden procesarse al mismo tiempo sin esperarse unas a otras.

Es posible que haya oído hablar del nuevo framework web de Python FastAPI. Por defecto, utiliza ASGI, lo que lo hace rapidísimo. FastAPI es también un micromarco web con muchas ventajas, incluyendo soporte para código asíncrono usando las palabras clave async y await de Python.

WSGI frente a ASGI: la analogía de la repostería

Para entender la diferencia entre WSGI y ASGI, imagina que estás preparando una fiesta de cumpleaños: hornear un pastel y hacer el glaseado desde cero. Se trata de dos tareas separadas o, en términos web, dos peticiones entrantes entrantes.

WSGI: Una tarea cada vez (procesamiento síncrono)

Con WSGI, cada petición se gestiona una tras otra. Debe completar la primera tarea por completo antes de pasar a la siguiente.

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

Por lo tanto, si la cocción tarda 30 minutos, tendrá que esperar incluso antes de poder empezar el glaseado. Se trata de un procesamiento síncrono: no hay solapamiento de tareas, aunque sólo estés esperando.

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:Multitarea entre peticiones (procesamiento asíncrono)

Con ASGI, puede gestionar varias peticiones a la vez. Si una está esperando (como la tarta en el horno), puedes cambiar y trabajar en otra.

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

En lugar de permanecer inactivo, aprovechas mejor el tiempo. ASGI funciona de esta manera, permitiendo que las tareas se pausen y reanuden, manejando E/S u otras operaciones largas sin bloquear todo lo demás.

Nota: No todas las tareas pueden ejecutarse al mismo tiempo; algunas dependen de que otras se hayan completado antes. Por ejemplo, no se puede hornear un pastel antes de mezclar la masa. Del mismo modo, en las aplicaciones ASGI, algunas operaciones (como la consulta de una base de datos o la lectura de un fichero) pueden requerir una ejecución ordenada.

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 requestsEjemplos de pseudocódigo en Python

Código síncrono al estilo 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

Aquí, make_frosting() ni siquiera empezará hasta que bake_cake() termine. Las peticiones se procesan de una en una.

Código síncrono estilo 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

En esta versión asíncrona, mientras bake_in_oven() está esperando, el servidor puede saltar y ejecutar make_frosting() en lugar de esperar. Ese es el poder de ASGI-no-bloqueo, multitarea eficiente.

Boxear con todo

WSGI es como hornear un pastel y quedarse quieto mientras está en el horno. ASGI te permite hacer el glaseado mientras tanto. Ambos tienen sus casos de uso, pero si necesitas aplicaciones web escalables y de alto rendimiento que puedan manejar muchas tareas eficientemente, ASGI es tu opción.

¿Tienes alguna pregunta o algo que compartir? Únete a la conversación en Slack de la comunidad de Vonagey mantente actualizado con el Boletín para desarrolladoressíguenos en X (antes Twitter)suscríbete a nuestro canal de YouTube para ver tutoriales en video, y sigue la página de página para desarrolladores de Vonage en LinkedInun espacio para que los desarrolladores aprendan y se conecten con la comunidad. Mantente conectado, comparte tu progreso y entérate de las últimas noticias, consejos y eventos para desarrolladores.

Compartir:

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

Tonya es una antigua defensora de los desarrolladores de Python en Vonage.