Repaso
English
PythonAvanzadoPY-30

¿Cuál es el principal coste de multiprocessing.Pool.map frente a los threads?

Opciones

  1. El GIL se comparte entre procesos, así que se bloquean entre sí
  2. Los argumentos y resultados deben serializarse con pickle y enviarse entre procesos (Opción correcta)
  3. Los procesos no pueden usar más de un núcleo de CPU a la vez
  4. 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.

Términos clave

Practica esta pregunta en Repaso