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)
您将看到函数调用,start并join在这里已经调用。实际上,它们总是multiprocessing在python 文档中的模块示例中调用。
现在之所以这么start称呼,是很明显的,这是因为它启动了过程。但是,join不同于完全结束该过程,如文档中所述:
阻塞调用线程,直到调用join()方法的进程终止或直到发生可选的超时为止。
因此,据我所知,join()是用来终止该过程的。那么,为什么terminate()在文档示例中不使用该功能TerminateProcess()呢?
因此,这使我们想到了主要问题,join和之间有什么区别terminate?理想情况下,什么是join目的,什么是terminate目的?因为根据示例,它们似乎都可以做相同的事情(如果我弄错了,请纠正我)。
到目前为止,我发现这可能是因为terminateWindows和Linux都不同,因为Windows具有不同的终止功能。选择的其他原因也将被理解。
所以,根据我的理解,
join()用于终止进程。
不,还差得很远。它告诉调用线程等待,直到另一个线程终止,然后返回。
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,您将没有输出。
| 归档时间: |
|
| 查看次数: |
1906 次 |
| 最近记录: |