
Compartir:
Tonya es una antigua defensora de los desarrolladores de Python en Vonage.
El WSGI de Python frente al ASGI es como hornear un pastel
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.
WSGI 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 smoothPor 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.
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 doneEn 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.
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.