2017-08-26 733 views
2

下面是代码:如何在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(),代码应该只打印“完成'就是这样,因为pool.join()的函数是'等待工作进程退出',但现在没有pool.join(),它会得到相同的结果。 我真的不明白。

+0

可以请你接受我的答案。 – Christian

回答

0

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

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

也检查出Pool.map

1

在您的代码中,方法get()join()具有相同的效果。它也等待过程完成,因为你想得到的结果。

如果您从您的代码中删除它,你会看到“完成”正在打印的第一:

done 
start process 0 
相关问题