Python,与joblib并行:使用多个参数延迟

2024-04-29 05:00:42 发布

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

我使用类似于下面的方法在两个矩阵上并行化for循环

from joblib import Parallel, delayed
import numpy

def processInput(i,j):
    for k in range(len(i)):
        i[k] = 1
    for t in range(len(b)):
        j[t] = 0
return i,j

a = numpy.eye(3)
b = numpy.eye(3)

num_cores = 2
(a,b) = Parallel(n_jobs=num_cores)(delayed(processInput)(i,j) for i,j in zip(a,b))

但我得到了以下错误:要解包的值太多(应为2)

是否有方法返回两个延迟值?或者你会提出什么解决方案?

还有,一点操作,有没有更紧凑的方法,像下面这样(实际上没有修改任何东西)来处理矩阵?

from joblib import Parallel, delayed
def processInput(i,j):
    for k in i:
        k = 1
    for t in b:
        t = 0
return i,j

我想避免使用has_shareable_内存,以避免实际脚本中可能出现的不良交互和更低的性能(?)


Tags: 方法infromimportnumpyforlenreturn
1条回答
网友
1楼 · 发布于 2024-04-29 05:00:42

可能太晚了,但作为对你问题第一部分的回答: 只需在延迟函数中返回一个元组。

return (i,j)

对于保存所有延迟函数输出的变量

results = Parallel(n_jobs=num_cores)(delayed(processInput)(i,j) for i,j in zip(a,b))

现在results是一个元组列表,每个元组包含一些(i,j),您只需遍历结果即可。

相关问题 更多 >