在Python3中使用多个map_async(Multiprocessing)

时间:2018-12-18 07:17:59

标签: python-3.x performance parallel-processing multiprocessing

我有一个示例代码,该示例代码在使用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()

1 个答案:

答案 0 :(得分:0)

map_async只是将可迭代对象拆分为一组块,并通过os.pipe将这些块发送给工作程序。因此,对map_async的两个后续调用将在工作人员看来是由上述两个集合的连接组成的单个列表。

这是正确的行为,因为工作人员实际上并不关心哪个map_async调用块属于。并行运行两个map_async不会提高速度或吞吐量。

如果出于任何原因您确实需要并行执行两个调用,则唯一的方法是创建两个不同的Pool对象。尽管如此,我还是建议不要使用这种方法,因为它会使事情变得更加不可预测。