Código bloqueante dentro de async: el error que paraliza todo
Por qué time.sleep y requests.get congelan el event loop entero, y cómo usar asyncio.to_thread o run_in_executor para evitarlo.
Por qué time.sleep y requests.get congelan el event loop entero, y cómo usar asyncio.to_thread o run_in_executor para evitarlo.
Cómo implementar `__aenter__`/`__aexit__`, async generators y `async for` para gestionar recursos y streams sin bloquear el event loop.
Cómo ejecutar múltiples corrutinas en paralelo con gather, TaskGroup y wait_for, y cuándo elegir cada herramienta.
Qué devuelve realmente una coroutine function, cómo await transfiere el control al event loop, y por qué la infección asíncrona es inevitable.
El event loop gestiona coroutines y callbacks I/O usando epoll/kqueue del SO; aprende cómo suspende, monitorea y reanuda tareas sin bloquear el hilo.
Diferencia entre threading preemptivo y asyncio cooperativo, cómo el event loop gestiona coroutines, y por qué bloquear sin await rompe todo el sistema.
Todo lo que viaja entre procesos debe ser serializable con pickle; funciones locales y recursos del SO no lo son, y hay patrones concretos para cada caso.
Diferencias internas entre los tres start methods de multiprocessing, cuándo cada uno es seguro, y cómo el cambio de default en macOS 3.12 afecta código existente.
Mecanismos de comunicación entre procesos en Python: cuándo usar Queue, Pipe o shared memory, y el costo real de pickle en cada caso.
Cómo crear procesos individuales con `Process` y distribuir trabajo en paralelo con `Pool`, incluyendo `map`, `starmap`, `imap` y `apply_async`.