我尝试使用scoops map调用来并行化我当前的代码。 我知道如何将它应用于基本功能。 我的问题是我想将这个地图调用应用于一个函数,该函数对于某些参数具有一系列值。
我目前的代码如下:
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 :(得分:0)
执行此操作的最pythonic方法是使用starmap而不是map。不幸的是,它看起来并不像scoop实现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)