我写了下面的代码
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()
?为什么主进程没有在子进程之前终止?
最佳答案
你的最终结果:
print po_res.get()
语句会阻塞主程序,直到map_async()
完全完成。 .get()
会阻塞,等待整个结果列表可用。直到传递给 map_async()
的所有工作都完成并且所有结果都返回到主程序之前,这种情况才会发生。
注释掉该语句,您将看到您的程序很快退出。
也就是说,无论如何,最好的做法是使用 .close()
和 .join()
。
关于python - 为什么map_async()不需要pool.close()和pool.join()?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22265278/