2015-04-02 33 views
0

我尝试使用scoops map call来并行化我当前的代码。 我知道如何将它应用于基本功能。 我的问题是,我想将这个映射调用应用于一个函数,该函数对于某些参数具有一系列值。在python中使用带有多个参数列表的并发映射

我当前的代码看起来像如下:

paramA = True 
paramB = 500 
paramC = [1,2,3,4,5] 
paramD = [0,2,4,6,8] 

resultsA = [] 
resultsB = [] 

for x in paramC: 
    for y in paramD: 
     resultA, resultB = doFoo(a=paramA, b=paramB, c=x, d=y) 
     resultsA.append(resultA) 
     resultsB.append(resultB) 

doFoo()是CPU密集型的任务,我想向并行,在第一,多内核甚至多台主机。 我最后想要的是这样的:

from scoop import futures 

paramA = True 
paramB = 500 
paramC = [1,2,3,4,5] 
paramD = [0,2,4,6,8] 

resultsA, resultsB = futures.map(doFoo, (paramA, paramB, paramC, paramD)) 

这可能吗?什么是pythonic方式来实现这一目标?

非常感谢您提前!

最好的问候, 罗宾

+0

你会遇到什么问题.... – 2015-04-02 19:21:50

回答

0

这样做的最Python的方式是使用starmap,而不是地图。不幸的是,它看起来不像勺子实现星图,所以你可以用一个函数来包装你的doFoo函数,该函数只需要一个参数元组,然后将它们解包并将它们传递给doFoo。

def doFooStar(params): 
    return doFoo(*params) 

param_list = ((paramA, paramB, x, y) for x in paramC for y in paramD) 

results = futures.map(doFooStar, param_list) 
resultsA, resultsB = zip(*results) 
相关问题