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

Posted

技术标签:

【中文标题】Python,与 joblib 并行化:延迟多个参数【英文标题】:Python, parallelization with joblib: Delayed with multiple arguments 【发布时间】:2017-03-04 07:18:47 【问题描述】:

我正在使用类似于以下内容的方法在两个矩阵上并行化 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)

有没有办法延迟返回 2 个值?或者您会提出什么解决方案?

另外,有点OP,有没有更紧凑的方式,比如下面的(实际上并没有修改任何东西)来处理矩阵?

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_memory,以避免实际脚本中可能出现的不良交互和较低的性能(?)

【问题讨论】:

【参考方案1】:

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

return (i,j)

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

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

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

【讨论】:

以上是关于Python,与 joblib 并行化:延迟多个参数的主要内容,如果未能解决你的问题,请参考以下文章

joblib保存模型和joblib的并行化处理和tqdm

多个进程共享一个 Joblib 缓存

使用 Joblib 将类对象实例作为输入参数的并行化函数

这个joblib是什么并行语法呢?这么多括号

多返回值函数的joblib并行处理

如何在 python joblib 中写入共享变量