了解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 Module of the Week提供了一个非常易懂的模块说明:“使用join()方法等待进程完成其工作并退出”,但似乎至少在OS X上已经这样做了。
我也在想这个方法的名称。这里的.join()
方法是否在连接任何内容?它是将进程与其结束连接起来吗?还是只是与Python本机的.join()
方法共享名称?
join()
)。 - dano