我试图在我的程序中并行化一段代码。
如果我使用multiprocessing.map_async (或starmap_async),代码挂在results.get()上。但是,如果我使用map (或starmap),代码将正确执行。下面是一个最低限度的工作示例,我可以用它来再现这种行为:
from multiprocessing import Pool
def function(i):
return i**2
if __name__ == '__main__':
print('map')
with Pool(6) as pool:
result = pool.map(function, range(100))
print(result)
print('map_async')
with Pool(6) as pool:
result = pool.map_async(function, range(100))
print('Getting results')
print(result.get())代码(几乎立即)运行到行print('Getting results'),然后挂起。
我做错了什么?
发布于 2020-02-06 12:42:21
调用print(result.get())时,您已经离开了上下文管理器,因此池已经关闭。缩进你的指纹:
with Pool(6) as pool:
result = pool.map_async(function, range(100))
print('Getting results')
print(result.get()) # <--https://stackoverflow.com/questions/60094970
复制相似问题