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
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()
.
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]]).
Gracias de nuevo Alex! – jldupont
- 1. Multiprocesamiento al iniciar demasiadas instancias de Python VM
- 2. Limitar memoria de Python VM
- 3. multiprocesamiento imap_unordered en python
- 4. argumentos de multiprocesamiento de python: ¿copia profunda?
- 5. multiprocesamiento Python error de salida
- 6. Cola de multiprocesamiento en Python
- 7. Problema de Python ssl con multiprocesamiento
- 8. NumPy vs. multiprocesamiento y mmap
- 9. Globals variables y Python multiprocesamiento
- 10. Python Multiprocesamiento Salir Elegantemente ¿Cómo?
- 11. multiprocesamiento de Python y la memoria
- 12. Qué estrategia usar con multiprocesamiento en python
- 13. Reintentos de agrupación de multiprocesamiento de python
- 14. Uso del multiprocesamiento de Python con diferente semilla aleatoria para cada proceso
- 15. El decorador de Python con multiprocesamiento falla
- 16. Python: ¿enlazar un método independiente?
- 17. SFTP en Python? (plataforma independiente)
- 18. Multiprocesamiento Python: ¿Cómo puedo redireccionar FIABLY stdout de un proceso hijo?
- 19. Python: cuándo usar subprocesos frente a multiprocesamiento
- 20. Python multiprocesamiento Pool.map llama a aquire?
- 21. multiprocesamiento python con 2 ventanas GTK
- 22. Python REPL para un proceso en ejecución
- 23. Cómo usar la cola de multiprocesamiento en Python?
- 24. python 2.7 vs python 3.1
- 25. python: compartir diccionarios de gran tamaño con multiprocesamiento
- 26. usando la lista con el multiprocesamiento de python
- 27. Comunicación de proceso en Python
- 28. Multiprocesamiento o multiprocesamiento?
- 29. Boo vs C# vs Python?
- 30. Argumentos de palabra clave de multiprocesamiento de Python
buenos puntos ... ¡gracias! – jldupont
Microsoft proporciona 'fork()' en versiones de gama alta de Windows. Ver mi [respuesta] (http://stackoverflow.com/a/5372260/95735) para más detalles. –
@PiotrDobrogost Pero no creo que el "multiprocesamiento" en windows se aproveche de esto. – Crast