2015-04-02 60 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) 
相關問題