2010-02-16 12 views
10

Aparte de la facilidad de uso del módulo multiprocessing cuando se trata de conectar con los procesos de recursos de comunicación, ¿existen otras diferencias entre el desove múltiples procesos que utilizan multiprocessing comparación con el uso subprocess para lanzar separada Python VMs?proceso de multiprocesamiento Python vs Python independiente VM

Respuesta

13

En las plataformas de Posix, multiprocessing primitivas envuelven esencialmente un os.fork(). Lo que esto significa es que en el momento en que genera un proceso en multiprocesamiento, el código ya importado/inicializado permanece así en el proceso hijo.

Esto puede ser una bendición si tiene muchas cosas para inicializar y luego cada subproceso esencialmente realiza operaciones en (copias de) esos objetos inicializados, pero no todo ayuda si lo que ejecuta en el subproceso no está relacionado por completo .

También existen implicaciones para recursos tales como manejadores de archivos, conectores, etc. con multiprocessing en una plataforma tipo Unix.

Mientras tanto, al usar subprocess, está creando un programa/intérprete completamente nuevo cada vez que Popen un nuevo proceso. Esto significa que puede haber menos memoria compartida entre ellos, pero también significa que puede convertir en un programa completamente separado o un nuevo punto de entrada en el mismo programa.

En Windows, las diferencias son menores entre multiprocessing y subprocess, porque Windows no proporciona fork().

+0

buenos puntos ... ¡gracias! – jldupont

+1

Microsoft proporciona 'fork()' en versiones de gama alta de Windows. Ver mi [respuesta] (http://stackoverflow.com/a/5372260/95735) para más detalles. –

+0

@PiotrDobrogost Pero no creo que el "multiprocesamiento" en windows se aproveche de esto. – Crast

3

Si ignora cualquier problema de comunicación (es decir, si las máquinas virtuales de Python separadas no se comunican entre sí, o se comunican solo a través de otros mecanismos establecidos explícitamente), no hay otras diferencias sustanciales. (Creo que multiprocessing, bajo ciertas condiciones, las plataformas tipo Unix, en particular, pueden usar el fork más eficiente en lugar del par fork-exec siempre implicado por multiprocessing, pero eso no es "sustancial" cuando solo unos pocos procesos son involucrado [[IOW, la diferencia de rendimiento en el arranque no será importante para el rendimiento de todo el sistema]]).

+0

Gracias de nuevo Alex! – jldupont

Cuestiones relacionadas