4

请看下面的代码:

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已在此处调用。事实上,它们总是multiprocessing在 python文档中的模块示例中被调用。

现在之所以这么start称呼的原因是相当明显的,因为它启动了这个过程。但是,join与完全结束该过程不同,如文档中所述:

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

所以,据我了解,join()是用来终止进程的。那么为什么terminate()文档的示例中没有使用该函数TerminateProcess()呢?

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

到目前为止,我发现,这可能是因为terminatewindows 和 linux 不同,因为 windows 具有不同的终止功能。选择的进一步原因也将不胜感激。

4

3 回答 3

9

join用于等待进程,不主动终止进程,whileterminate用于杀死进程。

试试下面的例子(带/不带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,您将没有输出。

于 2013-10-31T06:32:44.810 回答
4

所以,据我了解,join()是用来终止进程的。

不,甚至没有接近。它告诉调用线程等到另一个线程被终止,然后返回。

于 2013-10-31T06:33:24.493 回答
0

该函数join()用于告诉调用进程等待。

于 2013-10-31T08:50:57.133 回答