在python中使用具有多个参数列表的并发映射

2024-09-25 04:33:20 发布

您现在位置:Python中文网/ 问答频道 /正文

我尝试使用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))

有可能吗?用什么方法可以达到这个目的?你知道吗

事先非常感谢!你知道吗

致以最诚挚的问候, 罗宾


Tags: 函数代码intruemapforresultaresultb
1条回答
网友
1楼 · 发布于 2024-09-25 04:33:20

最适合python的方法是使用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)

相关问题 更多 >