gather, TaskGroup y wait_for: concurrencia real con asyncio
Cómo ejecutar múltiples corrutinas en paralelo con gather, TaskGroup y wait_for, y cuándo elegir cada herramienta.
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`.
Cómo multiprocessing crea procesos reales para ejecutar trabajo CPU-bound en paralelo, y cuándo su overhead lo hace contraproducente.
Cómo funciona el modo free-threaded en Python 3.13, su costo real en rendimiento, y qué código se rompe al eliminar el GIL como sincronización implícita.