我正在学习多处理模块。我在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呢?我必须这样做,因为进程是变量吗?
答案 0 :(得分:0)
当您要等待任何子流程完成时,您应该使用join()
,例如如果你的主程序想要根据工人的结果做某事。如果主进程长时间运行并经常创建子进程,则还应调用join()
。否则,你没有加入的那些将累积为"僵尸进程"。
通常,只要主进程的执行线程到达等待子进程不会受到伤害的程度,就这样做。这有点像关闭文件 - 它不是绝对必要的,因为所有文件都会在退出时隐式关闭,但这是一种很好的做法,因为它可以节省资源。