Explica cómo funciona asyncio y cuándo lo elegirías frente a threads o procesos.
Respuesta
- Un thread, un event loop. Las coroutines (
async def) devuelven el control en cada await, así que el loop puede ejecutar otras tareas mientras una espera I/O. - Cooperativo: cualquier llamada bloqueante (trabajo de CPU,
time.sleep, un driver de base de datos síncrono) lo congela todo. - Herramientas:
asyncio.gather, TaskGroup, create_task, Semaphore para limitar la concurrencia, wait_for para timeouts. - Elige asyncio para muchas operaciones de I/O simultáneas (miles de sockets, fan-out de APIs, websockets).
- Threads: más simples para unas pocas llamadas bloqueantes con librerías síncronas.
- Procesos: trabajo CPU-bound.
- Ejecuta código bloqueante desde async con
asyncio.to_thread / run_in_executor.
Practica esta pregunta en Repaso