Python de Cero a Experto / Python avanzado
Asyncio: asincronía en Python
Cuando un programa pasa el tiempo ESPERANDO —una respuesta de una API, una lectura de disco, una consulta a
una base de datos—, no tiene sentido quedarse congelado sin hacer nada. La programación ASÍNCRONA con
asyncio permite manejar muchas de esas esperas CONCURRENTEMENTE: mientras una tarea espera, otras avanzan.
Es el mismo concepto de asincronía que dominaste en JavaScript (SC-02), con la sintaxis async/await de
Python. Hoy entiendes las bases de asyncio.
El mesero que no se congela
async y await
Como asyncio necesita un bucle de eventos que este entorno del navegador maneja distinto, esta lección
muestra el código con bloques —pruébalo en tu Python instalado con python archivo.py—:
import asyncio
# 'async def' define una función asíncrona (una CORRUTINA)
async def cargar_gasto(id):
print(f" pidiendo gasto {id}...")
await asyncio.sleep(1) # espera 1s SIN bloquear (simula una API)
print(f" gasto {id} listo")
return {"id": id, "valor": id * 1000}
async def main():
# await espera a que una corrutina termine
gasto = await cargar_gasto(1)
print(gasto)
# asyncio.run arranca el bucle de eventos y ejecuta la corrutina principal
asyncio.run(main())async def define una CORRUTINA (una función asíncrona). Dentro, await PAUSA la corrutina hasta que algo
lento termine (aquí asyncio.sleep, que simula esperar una API) —pero sin BLOQUEAR el programa: mientras
espera, el bucle de eventos puede correr otras tareas—. asyncio.run(main()) arranca todo. La sintaxis es
casi idéntica a la de JavaScript: async/await, corrutinas que se pausan en los await. La diferencia
con una función normal: llamar cargar_gasto(1) no la ejecuta, devuelve una corrutina que debes await.
Concurrencia real: gather
¿Qué ventaja da asyncio.gather frente a esperar tres tareas con await una tras otra?
Mini-reto
Razona (o prueba en tu Python instalado) una versión asíncrona para Mi Bolsillo: 1) una corrutina
consultar_precio(producto) que haga await asyncio.sleep(1) y devuelva un precio; 2) una main que
consulte TRES productos con asyncio.gather y mida el tiempo total con time.time(); 3) compara
mentalmente cuánto tardaría secuencial (con tres await seguidos) vs concurrente. Explica por qué asyncio
ayuda con esperas de red pero no con cálculos pesados de CPU.
Qué sigue
¡Módulo 6 conquistado! Dominas el Python avanzado —generadores, decoradores, typing moderno, pattern matching y asyncio—. Ya escribes código pythónico y experto. El reto del módulo junta generadores y decoradores en un pipeline de datos elegante. Después llegan las tres RUTAS especializadas —scripting, backend y datos e IA— donde aplicarás todo esto a proyectos del mundo real.