Fra*_*sco 8 python parallel-processing delay joblib
我使用类似于以下内容的东西来并行化两个矩阵的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))
Run Code Online (Sandbox Code Playgroud)
但我收到以下错误:解压缩的值太多(预期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
Run Code Online (Sandbox Code Playgroud)
我想避免使用has_shareable_memory,以避免在实际脚本中出现可能的错误交互并降低性能(?)
可能为时已晚,但作为问题第一部分的答案:只需在延迟函数中返回一个元组.
return (i,j)
Run Code Online (Sandbox Code Playgroud)
并且对于保存所有延迟函数输出的变量
results = Parallel(n_jobs=num_cores)(delayed(processInput)(i,j) for i,j in zip(a,b))
Run Code Online (Sandbox Code Playgroud)
现在结果是一个元组列表,每个元组都包含一些(i,j),你可以迭代结果.