了解Python 多重处理(来自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()
方法在此处串联吗?它是在连接过程的结尾吗?还是只是与Python的本地.join()
方法共享一个名称?
CPU, Memory resources
是与父进程分开的实际对象,然后join
在子进程完成后再次返回吗?