如何在 Python 多处理模块中使用 Pool.join()?



这是代码:

def function(index):
print('start process '+str(index))
time.sleep(1)
print('end process '+str(index))
return str(index)
if __name__ == '__main__':
pool = Pool(processes=3)   
for i in range(4):
res = pool.apply_async(function,args=(i,)) 
print(res.get())
pool.close()
print('done')

和输出:

start process 0
end process 0
0
start process 1
end process 1
1
start process 2
end process 2
2
start process 3
end process 3
3
done

在我看来,如果我不使用 pool.join((,代码应该只打印"done",仅此而已,因为 pool.join(( 的功能是"等待工作进程退出",但现在没有 pool.join((,它会得到相同的结果。 我真的不明白。

在您的代码中,方法get()join()具有相同的效果。它还等待该过程完成,因为您希望获得它的结果。

如果将其从代码中删除,您将看到首先打印的"完成":

done
start process 0

res.get等待进程完成(否则它将如何获得返回值?(,这意味着进程 0 必须在进程 1 启动之前完成,依此类推。

删除res.get,您将看不到进程完成。在第一个循环之后res.get移动到一个单独的循环,您将看到它们中的任何一个完成之前都开始了。

另请查看Pool.map.

相关内容

  • 没有找到相关文章

最新更新