我有一个示例代码,该示例代码在使用Python 3的多处理中使用map_async。我想弄清楚的是如何同时运行map_async(a,c)和map_async(b,d)。但是似乎第二个map_async(b,d)语句似乎在第一个即将完成时运行。有没有办法我可以同时运行两个map_async函数?我尝试在线搜索,但没有得到想要的答案。下面是示例代码。如果您还有其他建议,我也非常乐意听。谢谢大家的帮助!
from multiprocessing import Pool
import time
import os
def a(i):
print('First': i)
return
def b(i):
print('Second': i)
return
if __name__ = '__main__':
c = range(100)
d = range(100)
pool = Pool(os.cpu_count())
pool.map_async(a, c)
pool.map_async(b, d)
pool.close()
pool.join()
答案 0 :(得分:0)
map_async
只是将可迭代对象拆分为一组块,并通过os.pipe
将这些块发送给工作程序。因此,对map_async
的两个后续调用将在工作人员看来是由上述两个集合的连接组成的单个列表。
这是正确的行为,因为工作人员实际上并不关心哪个map_async
调用块属于。并行运行两个map_async
不会提高速度或吞吐量。
如果出于任何原因您确实需要并行执行两个调用,则唯一的方法是创建两个不同的Pool
对象。尽管如此,我还是建议不要使用这种方法,因为它会使事情变得更加不可预测。