代码之家  ›  专栏  ›  技术社区  ›  Francesco

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

  •  17
  • Francesco  · 技术社区  · 8 年前

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

    1 回复  |  直到 8 年前
        1
  •  16
  •   qazplok11    8 年前

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

    return (i,j)
    

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

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

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