为什么map_async()不需要pool.close()和pool.join()?
我写了以下代码
import multiprocessing as mp
import time
#
def f(x) :
time.sleep(0.1)
return pow( x, 2 )
#
my_chunksize = 10
#
if __name__ == '__main__':
#
po = mp.Pool( processes=2 )
po_res = po.map_async( f, range(100), my_chunksize )
#po.close()
#po.join()
#
print po_res.get()
这个代码运行得很好。为什么 po.close()
和 po.join()
不需要?为什么主进程在子进程结束之前不会死掉呢?
1 个回答
3
你的最终结果:
print po_res.get()
这段代码会让主程序停下来,直到 map_async()
完全完成。其实是 .get()
这个部分让程序停住,等待所有的结果列表都准备好。只有等到所有传给 map_async()
的工作都完成,结果才会返回给主程序。
如果你把这段代码注释掉,你会发现程序运行得非常快。
不过,最好还是使用 .close()
和 .join()
,这是个好习惯。