Asincronía: Programación No Bloqueante (Async/Await)
Normalmente, Python ejecuta el código de forma síncrona: espera a que una tarea termine antes de empezar la siguiente. Sin embargo, si una tarea tarda mucho (como descargar un archivo), todo el programa se detiene. La asincronía nos permite aprovechar esos "tiempos de espera" para hacer otras cosas.
1. ¿Qué es la Asincronía?
Imagina que estás en un restaurante. * Síncrono: El mesero toma tu orden, va a la cocina y se queda parado esperando a que la comida esté lista antes de atender a nadie más. * Asíncrono: El mesero deja la orden en la cocina y, mientras la comida se prepara, atiende otras mesas. Cuando la comida está lista, regresa por ella.
2. Palabras Clave: async y await
Para manejar esto en Python, utilizamos la librería asyncio:
async def: Define una función como una corrutina. Esto significa que es una función que puede ser pausada.await: Se coloca antes de una tarea que toma tiempo. Indica a Python: "Pausa esta función aquí, ve a hacer otras tareas y regresa cuando esto termine".
3. El Bucle de Eventos (Event Loop)
El Event Loop es el director de orquesta. Decide qué tarea se ejecuta en cada momento. Cuando una tarea llega a un await, el Event Loop la pone a un lado y le da el turno a otra tarea que esté lista para procesar.
Reto: Simulador de Tareas Asíncronas
Vamos a crear una corrutina que simule la descarga de un archivo sin detener el programa.
Instrucciones:
- Importa el módulo
asyncio. - Define una corrutina llamada
descargar_archivo. - Dentro, usa
await asyncio.sleep(1)para simular una espera de 1 segundo. - La función debe retornar el string
"Descarga Completa". - Para probarla en el simulador, simplemente define la función; el sistema se encargará de ejecutarla con el bucle de eventos.
# Tu primera corrutina: