Avanzadopython
Programación Asíncrona con Asyncio
Domina la concurrencia no bloqueante en Python con async, await y el módulo asyncio.
¿Por qué asincronía en Python?
Las operaciones de entrada/salida (I/O), como llamadas HTTP a APIs, consultas a bases de datos o lectura de archivos en red, pasan la mayor parte del tiempo esperando una respuesta. Con
asyncio, el hilo principal no se bloquea y puede atender otras tareas mientras espera.python
1import asyncio
2
3async def descargar_datos(id_proceso, delay):
4 print(f"Iniciando descarga {id_proceso}...")
5 await asyncio.sleep(delay) # Pausa no bloqueante
6 print(f"Descarga {id_proceso} completada.")
7 return {"id": id_proceso, "status": "ok"}
8
9async def main():
10 # Ejecutar múltiples corrutinas en paralelo
11 resultados = await asyncio.gather(
12 descargar_datos(1, 2),
13 descargar_datos(2, 1),
14 descargar_datos(3, 1.5)
15 )
16 print("Todos los resultados:", resultados)
17
18asyncio.run(main())Diferencia entre Hilos (Threading) y Asyncio
Threading utiliza múltiples hilos administrados por el sistema operativo (sujetos al GIL en CPython). Asyncio utiliza un Event Loop en un único hilo con concurrencia cooperativa: el código cede el control voluntariamente en cada instrucción
await.python
1# Ejemplo con timeout controlado
2async def tarea_con_limite():
3 try:
4 async with asyncio.timeout(3.0): # Python 3.11+
5 await asyncio.sleep(5.0)
6 except TimeoutError:
7 print("La tarea excedió el tiempo límite permitido.")