了解Python
Multiprocessing(从
PMOTW article开始),并希望对于join()方法正在做什么有一些澄清。
在old tutorial from 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模块提供very readable explanation of the module; “等待一个进程已经完成工作并退出,使用join()方法”,但似乎至少OS X正在这样做。
我也想知道方法的名称。 .join()方法是否连接任何东西?它结合一个进程结束吗?或者它只是使用Python的native .join()方法共享一个名称?