¿Cuál es el principal coste de multiprocessing.Pool.map frente a los threads?
Opciones
- El GIL se comparte entre procesos, así que se bloquean entre sí
- Los argumentos y resultados deben serializarse con pickle y enviarse entre procesos (Opción correcta)
- Los procesos no pueden usar más de un núcleo de CPU a la vez
- Pool.map no puede devolver resultados, así que hay que escribirlos en archivos
Respuesta
Los argumentos y resultados deben serializarse con pickle y enviarse entre procesos
Por qué
Los procesos no comparten memoria. Para enviar trabajo a otro proceso, Python debe convertir los argumentos en bytes (pickling), enviarlos y convertir de vuelta los resultados.
Con tareas muy pequeñas o datos muy grandes, esta copia puede tardar más que el propio trabajo.
Envía el trabajo en bloques más grandes para pagar ese coste menos veces.
Recuerda
Los procesos pagan un coste por copiar datos (pickle) entre ellos.