加入和终止之间的区别

时间:2013-10-31 06:30:48

标签: python multiprocessing

请查看以下代码:

from multiprocessing import Process

def f(name):
    print 'hello', name

if __name__ == '__main__':
    p = Process(target=f, args=('bob',))
    p.start()
    p.join()

您会看到此处调用了函数调用startjoin。事实上,在python documentation中的multiprocessing模块的示例中,它们总是调用。

现在调用start的原因是相当明显的,因为它启动了这个过程。但是,join与完全结束流程不同,正如文档中所述:

  

阻止调用线程,直到调用join()方法的进程终止或者直到发生可选超时为止。

因此,根据我的理解,join()用于终止进程。那么为什么不是文档示例中使用的terminate()函数或TerminateProcess()

因此,这将我们带到主要问题,jointerminate之间有什么区别?理想情况下,join的目的是什么,terminate的目的是什么?因为他们似乎都能够根据例子做同样的事情(纠正我,如果我错了)。

我到目前为止发现,可能因为terminate对于windows和linux都不同,因为windows具有不同的终止功能。选择的其他原因也将受到赞赏。

3 个答案:

答案 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()用于告诉调用进程等待。