Tecnología · GUÍA PRÁCTICA
¿Python lanza BrokenProcessPool? Conserva el límite de salida antes de rehacer el pool
La excepción solo prueba que un worker terminó de forma no limpia. Guarda tarea, PID, método de inicio, stderr, estado de salida y evidencia OOM antes de elegir la reparación.

BrokenProcessPool no equivale a OOM ni demuestra que __main__ esté mal; marca que un worker de ProcessPoolExecutor no terminó limpiamente.
Vincula un fallo con su tarea, worker y eventos del sistema, corrige solo el límite probado y valida con la misma tarea y otra tarea normal.
1. Congela un fallo antes de rehacer el pool
Registra ID de tarea, huella segura de entrada, hora, Python, plataforma, opciones, método de inicio y cadena completa de excepción.
No empieces con reintentos: reduce a una tarea con el mismo módulo, initializer, método y límites.
2. Separa el punto de entrada de la muerte del proceso
Verifica __main__ importable, guardas, callable, argumentos y retorno serializables; ejecuta una función superior mínima con el mismo método.
Si no inicia, corrige entrada o initializer; si la tarea real inicia y rompe el pool, captura la salida.
3. Captura el límite de salida del worker
Registra tarea, PID, initializer, inicio, stderr y faulthandler en un destino que sobreviva al cierre del pool.
No dependas de atributos privados; conserva código, señal y registros nativos disponibles para esa versión.
4. Correlaciona señales, OOM y despliegues
En Linux compara memory.events; solo el aumento de oom_kill en la misma carga y ventana prueba OOM.
Alinea memoria máxima, concurrencia, entrada, reinicios y terminaciones; sin evidencia deja la causa sin resolver.
5. Corrige una causa probada y valida dos veces
Repara entrada, extensión nativa, capacidad o supervisor según la evidencia.
Repite la tarea original y otra normal en el mismo pool; ambas deben pasar sin nuevos eventos de caída u OOM.
