我有一个函数(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()
当你的函数返回多个项目,你会得到结果元组的列表,从您的通话pool.map()
。 const1
需要在这些所有元组第一项,const2
在这些元组的所有第二项。这是对zip内置功能,它返回聚合来自每个作为参数传递的iterables的元素是迭代器的工作。
你必须解开列表中,这样的结果元组是为zip
函数的参数。然后将其分配给多个变量解压迭代器:
const1, const2 = zip(*pool.map(function, files))