为什么map_async()不需要pool.close()和pool.join()?

3 投票
1 回答
1718 浏览
提问于 2025-04-17 21:24

我写了以下代码

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(),这是个好习惯。

撰写回答