Aprender sobre el multiprocesamiento de Python (de un artículo de PMOTW ) y me encantaría una aclaración sobre qué join()
está haciendo exactamente el método.
En un viejo tutorial de 2008 , establece que sin la p.join()
llamada en el código siguiente, "el proceso hijo permanecerá inactivo y no terminará, convirtiéndose en un zombi que debe matar manualmente".
from multiprocessing import Process
def say_hello(name='world'):
print "Hello, %s" % name
p = Process(target=say_hello)
p.start()
p.join()
Agregué una copia impresa del PID
y una time.sleep
para probar y, por lo que puedo decir, el proceso termina por sí solo:
from multiprocessing import Process
import sys
import time
def say_hello(name='world'):
print "Hello, %s" % name
print 'Starting:', p.name, p.pid
sys.stdout.flush()
print 'Exiting :', p.name, p.pid
sys.stdout.flush()
time.sleep(20)
p = Process(target=say_hello)
p.start()
# no p.join()
en 20 segundos:
936 ttys000 0:00.05 /Library/Frameworks/Python.framework/Versions/2.7/Reso
938 ttys000 0:00.00 /Library/Frameworks/Python.framework/Versions/2.7/Reso
947 ttys001 0:00.13 -bash
después de 20 segundos:
947 ttys001 0:00.13 -bash
El comportamiento es el mismo con p.join()
agregado al final del archivo. Python Module of the Week ofrece una explicación muy legible del módulo. ; "Para esperar hasta que un proceso haya completado su trabajo y salido, use el método join ()", pero parece que al menos OS X lo estaba haciendo de todos modos.
También me pregunto sobre el nombre del método. ¿El .join()
método está concatenando algo aquí? ¿Está concatenando un proceso con su final? ¿O simplemente comparte un nombre con el .join()
método nativo de Python ?
CPU, Memory resources
se separa del proceso principal y luego se join
vuelve a editar una vez que se completa el proceso secundario?