我何时在多处理模块中使用join方法?

时间:2015-01-31 12:13:12

标签: python multiprocessing python-multiprocessing

我正在学习多处理模块。我在python.org的文档中找到了这些例子:

from multiprocessing import Process

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

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

他们在这里使用join来完成整个过程。

from multiprocessing import Process, Lock

def f(l, i):
    l.acquire()
    try:
        print('hello world', i)
    finally:
        l.release()

if __name__ == '__main__':
    lock = Lock()

    for num in range(10):
        Process(target=f, args=(lock, num)).start()

但在这种情况下他们不会使用它。我也读到了这个:

  

还要记住,非守护进程会自动加入。

这解释了第二个例子。那我为什么要在第一个使用join呢?我必须这样做,因为进程是变量吗?

1 个答案:

答案 0 :(得分:0)

当您要等待任何子流程完成时,您应该使用join(),例如如果你的主程序想要根据工人的结果做某事。如果主进程长时间运行并经常创建子进程,则还应调用join()。否则,你没有加入的那些将累积为"僵尸进程"。

通常,只要主进程的执行线程到达等待子进程不会受到伤害的程度,就这样做。这有点像关闭文件 - 它不是绝对必要的,因为所有文件都会在退出时隐式关闭,但这是一种很好的做法,因为它可以节省资源。