如何解压从`Pool.map()`结果?

问题描述 投票:1回答:1

我有一个函数(preprocess_fit),将第一个进行预处理的数据集(即平滑,基线校正,并筛选出坏数据)。然后该函数的初始猜测用于参数,然后通过迭代猜测以找到最佳拟合,然后返回CONST1,CONST2。该功能还计算了一堆其他的参数,但它们不是在这种情况下返回。

然后,我需要循环中的所有文件此功能在目录(〜1000个文件)。我通过使用包含for循环的第二功能(功能)做到这一点。预处理步骤,特别是猜测迭代是特别耗费时间。

我想用多模块汇集功能(功能),解压常量,然后添加到列表中。的尝试:除了:因为一些文件丢失的元数据包括在内,preprocess_fit函数失败,我想发生这种情况时NaN值附加到列表中。

问题:1)泳池无法解压缩功能2)如果我只返回功能(文件const1--它)的过程被附加到列表中,而不是输出。

任何建议将是巨大的。

def preprocess_fit(file):
    #applies a number of pre-processing steps based on file metadata
    #optimizes fit starting with an initial guess for a parameter until RMS 
    #is minimized
    #returns constants from fitting process and final “guess” parameter
    return const1, const2

def function(files):
    for file in files:
        const1, const2 = preprocess_fit(file)
    return const1, const2

if __name__ == '__main__':
    files = glob.glob("largedata\*.txt")
    p = Pool(24)
    c1 = []
    c2 = []
    import numpy as np
    try:
        const1, const2 = p.map(function, files)
        c1.append(const1)
        c2.append(const2)
    except:
        c1.append(np.nan)
        c2.append(np.nan)
    p.close()
    p.join()
python parallel-processing multiprocessing python-multiprocessing unpack
1个回答
0
投票

当你的函数返回多个项目,你会得到结果元组的列表,从您的通话pool.map()const1需要在这些所有元组第一项,const2在这些元组的所有第二项。这是对zip内置功能,它返回聚合来自每个作为参数传递的iterables的元素是迭代器的工作。

你必须解开列表中,这样的结果元组是为zip函数的参数。然后将其分配给多个变量解压迭代器:

const1, const2 = zip(*pool.map(function, files))
© www.soinside.com 2019 - 2024. All rights reserved.