加入和终止之间的区别

Gam*_*iac 3 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()
Run Code Online (Sandbox Code Playgroud)

您将看到函数调用,startjoin在这里已经调用。实际上,它们总是multiprocessing在python 文档中的模块示例中调用。

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

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

因此,据我所知,join()是用来终止该过程的。那么,为什么terminate()在文档示例中不使用该功能TerminateProcess()呢?

因此,这使我们想到了主要问题,join和之间有什么区别terminate?理想情况下,什么是join目的,什么是terminate目的?因为根据示例,它们似乎都可以做相同的事情(如果我弄错了,请纠正我)。

到目前为止,我发现这可能是因为terminateWindows和Linux都不同,因为Windows具有不同的终止功能。选择的其他原因也将被理解。

Ign*_*ams 6

所以,根据我的理解,join()用于终止进程。

不,还差得很远。它告诉调用线程等待,直到另一个线程终止,然后返回。

  • @GamesBrainiac:它会阻止线程执行。如果在主线程中调用它,那么尽管其他线程会运行,但“程序”似乎被阻塞了。 (3认同)

fal*_*tru 5

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()
Run Code Online (Sandbox Code Playgroud)

使用terminate,您将没有输出。