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

时间:2014-03-08 05:01:34

标签: python multiprocessing pool

我写了以下代码

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 个答案:

答案 0 :(得分:2)

你的决赛:

print po_res.get()

语句阻止主程序,直到map_async()完全结束。它是.get()阻塞,等待整个结果列表可用。直到传递给map_async()的所有工作都已完成并且所有结果都返回到主程序之后,这种情况才会发生。

评论该声明,你会发现你的程序很快退出。

尽管如此,最好不要使用.close().join()