请查看以下代码:
from multiprocessing import Process
def f(name):
print 'hello', name
if __name__ == '__main__':
p = Process(target=f, args=('bob',))
p.start()
p.join()
您会看到此处调用了函数调用start
和join
。事实上,在python documentation中的multiprocessing
模块的示例中,它们总是被调用。
现在调用start
的原因是相当明显的,因为它启动了这个过程。但是,join
与完全结束流程不同,正如文档中所述:
阻止调用线程,直到调用join()方法的进程终止或者直到发生可选超时为止。
因此,根据我的理解,join()
用于终止进程。那么为什么不是文档示例中使用的terminate()
函数或TerminateProcess()
?
因此,这将我们带到主要问题,join
和terminate
之间有什么区别?理想情况下,join
的目的是什么,terminate
的目的是什么?因为他们似乎都能够根据例子做同样的事情(纠正我,如果我错了)。
我到目前为止发现,可能因为terminate
对于windows和linux都不同,因为windows具有不同的终止功能。选择的其他原因也将受到赞赏。
答案 0 :(得分:4)
join
用于等待进程,而不是主动终止进程,而terminate
用于终止进程。
尝试以下示例(带/不带p.terminate()
):
from multiprocessing import Process
import time
def f(name):
time.sleep(1)
print 'hello', name
if __name__ == '__main__':
p = Process(target=f, args=('bob',))
p.start()
p.terminate() # <---
p.join()
使用terminate
,您无法获得输出。
答案 1 :(得分:2)
因此,根据我的理解,
join()
用于终止该过程。
没有。差远了。它告诉调用线程等待,直到另一个线程终止,然后返回。
答案 2 :(得分:0)
函数join()
用于告诉调用进程等待。