Puedes ejecutar cualquier ejemplo en nuestra consola interactiva: Abrir consola de Python →
Programación asíncrona con async/await en Python
La programación asíncrona permite ejecutar tareas concurrentes sin bloquear el programa. En esta guía aprenderás a usar async, await, corutinas, tasks y cómo funcionan internamente dentro del event loop de Python.
Tabla de contenidos
- ¿Qué es la programación asíncrona?
- Corutinas con async
- await y operaciones no bloqueantes
- Crear y ejecutar tasks
- asyncio.sleep y simulación de IO
- Recolección de resultados
- Ejercicios
- Mini‑proyecto
1. ¿Qué es la programación asíncrona?
La programación asíncrona permite ejecutar múltiples tareas sin bloquear el flujo principal. Python usa un event loop que gestiona corutinas cooperativas.
2. Corutinas con async
async def saludar():
print("Hola async")
import asyncio
asyncio.run(saludar())
3. await y operaciones no bloqueantes
import asyncio
async def tarea():
print("Esperando...")
await asyncio.sleep(2)
print("Listo")
asyncio.run(tarea())
4. Crear y ejecutar tasks
import asyncio
async def trabajo(n):
await asyncio.sleep(1)
print(f"Tarea {n} completada")
async def main():
tareas = [asyncio.create_task(trabajo(i)) for i in range(5)]
await asyncio.gather(*tareas)
asyncio.run(main())
5. asyncio.sleep y simulación de IO
async def descargar():
print("Descargando...")
await asyncio.sleep(3)
print("Descarga completa")
6. Recolección de resultados
import asyncio
async def cuadrado(n):
await asyncio.sleep(1)
return n * n
async def main():
resultados = await asyncio.gather(
cuadrado(2),
cuadrado(3),
cuadrado(4)
)
print(resultados)
asyncio.run(main())
7. Ejercicios
- Crea una corutina que simule una operación de base de datos.
- Crea 10 tasks que se ejecuten en paralelo.
- Usa gather para recolectar resultados.
- Simula un timeout usando asyncio.wait_for.
- Crea un pipeline asíncrono.
async def db():
await asyncio.sleep(2)
return "OK"
asyncio.wait_for(tarea(), timeout=1)
async def paso(x):
await asyncio.sleep(1)
return x * 2
8. Mini‑proyecto: Descargador asíncrono
import asyncio
async def descargar(url):
print("Descargando:", url)
await asyncio.sleep(2)
return f"Contenido de {url}"
async def main():
urls = ["a.com", "b.com", "c.com"]
tareas = [asyncio.create_task(descargar(u)) for u in urls]
resultados = await asyncio.gather(*tareas)
print(resultados)
asyncio.run(main())