IOKELU
Nivel: Avanzado – Guía 6
💡 Prueba el código:
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

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())

Siguiente guía

asyncio en profundidad →