以下是代码:
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(),那么代码应该只打印完成'这就是它,因为pool.join()的功能是'等待工作进程退出',但现在没有pool.join(),它得到相同的结果。 我真的不明白。
答案 0 :(得分:2)
在您的代码中,方法get()
与join()
具有相同的效果。它还等待完成该过程,因为您希望获取结果。
如果从代码中删除它,您将看到首先打印“完成”:
done
start process 0
答案 1 :(得分:1)
res.get
等待进程完成(如何获得返回值?)这意味着进程0必须在进程1开始之前完成,依此类推。
删除res.get
,您将无法看到流程完成。在第一个循环之后将res.get
移动到一个单独的循环中,您将看到它们都在它们完成之前开始。
同时查看Pool.map
。