了解 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 Module of the Week 提供了一个 这个模块非常易读的解释; “要等到进程完成工作并退出,请使用 join ()方法。”不过看起来至少 OS X 是这么做的。
我还想知道该方法的名称。.join()
方法在这里连接了什么吗?它是否连接了一个过程和它的结束?或者它只是与 Python 的本机 .join()
方法共享一个名称?