Изучение Python Multiprocessing (из статья PMOTW), и мне хотелось бы получить некоторое разъяснение о том, что именно делает метод join()
.
В старом учебнике с 2008 года говорится, что без вызова p.join()
в приведенном ниже коде "дочерний процесс будет простаивать и не заканчивается, становясь зомби, вы должны убить вручную".
from multiprocessing import Process
def say_hello(name='world'):
print "Hello, %s" % name
p = Process(target=say_hello)
p.start()
p.join()
Я добавил распечатку PID
, а также time.sleep
для проверки, и, насколько я могу судить, процесс завершается самостоятельно:
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()
в течение 20 секунд:
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
через 20 секунд:
947 ttys001 0:00.13 -bash
Поведение одинаково с p.join()
, добавленным в конце файла. Модуль Python недели предлагает очень читаемое объяснение модуля; "Чтобы дождаться завершения процесса и выхода из него, используйте метод join()., Но похоже, что по крайней мере OS X все равно это делала.
Мне также интересно узнать имя метода. Является ли метод .join()
конкатенированием чего-либо здесь? Это конкатенирование процесса с его завершением? Или просто передайте имя с помощью собственного метода .join()
на языке Python?