asyncio
es una biblioteca en el lenguaje de programación Python que se utiliza para escribir código concurrente utilizando la sintaxis async/await. Se diseño intencionalmente para manejar de manera eficiente la Entrada/Salida (I/O) en programas que hagan uso de la concurrencia.
La biblioteca asyncio
toma ventaja de la sintaxis async
/await
en Python para una gestión más eficiente y más limpia del código concurrente, haciendo más sencillo escribir programas que ejecuten varias operaciones de manera simultánea.
asyncio
A continuación, te presentamos un ejemplo simple de cómo podrías usar asyncio
para manejar tareas concurrentes.
import asyncio
async def tarea(nombre, segundos):
print(f'La tarea {nombre} inicia')
await asyncio.sleep(segundos)
print(f'La tarea {nombre} finaliza después de {segundos} segundos')
async def principal():
await asyncio.gather(
tarea('A', 1),
tarea('B', 2),
)
asyncio.run(principal())
En este ejemplo, el programa maneja dos tareas concurrentes “A” y “B” que se ejecutan al mismo tiempo pero tardan diferentes duraciones antes de finalizar.
Gracias a asyncio
y la sintaxis async
/await
, Python puede manejar estas operaciones concurrentes de forma eficiente, pausando y reanudando cada tarea conforme se necesite sin bloquear la ejecución del programa.
Es importante considerar que, aunque asyncio
es una herramienta poderosa para manejar la concurrencia en Python, no es necesariamente la solución correcta para todos los problemas de concurrencia. Para operaciones de cálculo intensivo que requieren paralelismo verdadero, es posible que debas usar otras herramientas como multiprocessing o bibliotecas específicas para trabajos de cálculo de alto rendimiento.
Recuerda siempre hacer uso correcto de la sintaxis async
/await
para asegurar que tus tasks se ejecuten de manera concurrente, y hace uso de las funciones que asyncio
provee para manejar múltiples tasks, como gather
o wait
.
En conclusión, asyncio
es una biblioteca invaluables cuando tu programa en Python requiere manejar de manera eficiente varias tareas de I/O concurrentes, permitiendo que tu código sea más ordenado, limpio y eficiente.