从多进程函数调用中检索和合并返回数组的有效方法

时间:2016-10-05 21:52:07

标签: python multiprocessing python-multiprocessing

def get_version_list(env):
  list = []
  #do some intensive work
  return list

if __name__ == '__main__':
  from multiprocessing import Pool

  pool = Pool()

  result1 = pool.apply_async(get_version_list, ['prod'])
  result2 = pool.apply_async(get_version_list, ['uat'])
  #etc, I have six environment to check.

  alist = result1.get()
  blist = result2.get()

理想情况下,我希望有一个包含我的六个环境的列表,并在该列表上循环以为每个环境调用我的函数(并行),然后联合所有返回的列表。联合列表不应多次包含值。

类似的东西(我知道那段代码不起作用,但它可以让你知道想做什么)

if __name__ == '__main__':
  from multiprocessing import Pool

  pool = Pool()

  env = ['uat', 'prod', 'lt', 'lt2', 'cert', 'sin']

  for e in env:
      result = pool.apply_async(get_version_list, [e])

  #Merging the lists of the 6 function calls (unique entries)
  list = result.get()

有一种简单的方法吗?

1 个答案:

答案 0 :(得分:1)

使用map_async代替apply_async

pool = Pool()
env = ['uat', 'prod', 'lt', 'lt2', 'cert', 'sin']
x = pool.map_async(get_version_list, env)

现在x将是结果列表。