学习Python多重处理(来自一个PMMOTW 文章)并且希望能澄清一下到底是什么join()
方法正在做。
In an 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
以及ASAtime.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()
method?