procesos proceso paralelo multitarea multiprocesamiento crear concurrentes con python multiprocessing

proceso - python 2 multiprocessing



Bomba de multiprocesamiento (3)

En Windows no existe una rutina fork() , por lo que el multiprocessing importa el módulo actual para acceder a la función worker . Sin la instrucción if , el proceso hijo inicia sus propios hijos y así sucesivamente.

Estaba trabajando en el siguiente ejemplo del tutorial de Doug Hellmann sobre multiprocesamiento:

import multiprocessing def worker(): """worker function""" print ''Worker'' return if __name__ == ''__main__'': jobs = [] for i in range(5): p = multiprocessing.Process(target=worker) jobs.append(p) p.start()

Cuando traté de ejecutarlo fuera de la declaración if:

import multiprocessing def worker(): """worker function""" print ''Worker'' return jobs = [] for i in range(5): p = multiprocessing.Process(target=worker) jobs.append(p) p.start()

Comenzó procesos de desove sin parar, ¡y la única forma de detenerlo fue reiniciar!

¿Por qué sucedería eso? ¿Por qué no generó 5 procesos y salió? ¿Por qué necesito la declaración if?


No sé sobre el multiprocessing , pero sospecho que genera procesos secundarios que tienen un __name__ global diferente. Al eliminar la prueba, está haciendo que todos los niños comiencen nuevamente el proceso de desove.


Tenga en cuenta que la documentación menciona que necesita la declaración if en Windows ( here ).

Sin embargo, la documentación no dice que esto mate su máquina casi instantáneamente, requiriendo un reinicio. Así que esto puede ser bastante confuso, especialmente si el uso de multiprocessing ocurre en alguna función en el interior del código. No importa cuán profundamente esté escondido, aún necesita la verificación if en el archivo principal del programa. Esto prácticamente descarta el uso de multiprocessing en cualquier tipo de biblioteca.

multiprocessing en general parece un poco duro. Puede tener la interfaz de la interfaz de subprocesos, pero simplemente no hay una forma sencilla de resolver el GIL.

Para problemas de paralelización más complejos, también vería el módulo de subprocess o algunas otras bibliotecas (como mpi4py o Parallel Python ).