У меня есть функция (preprocess_fit), которая сначала предварительно обрабатывает набор данных (то есть сглаживание, исправление базовой линии и отфильтровывает неверные данные).Затем функция принимает начальное предположение для параметра, а затем перебирает догадки, чтобы найти оптимизированное соответствие, а затем возвращает const1, const2.Функция также вычисляет кучу других параметров, но они не возвращаются в этом случае.
Затем мне нужно зациклить эту функцию для всех файлов в каталоге (~ 1000 файлов).Я делаю это, используя вторую функцию (функцию), которая содержит цикл for.Этап предварительной обработки, в частности итерация предположения, особенно трудоемкий.
Я бы хотел объединить функцию (функцию) с помощью модуля многопроцессорной обработки, распаковать константы и затем добавить в список.Включает try: exception:, поскольку в некоторых файлах отсутствуют метаданные, а функция 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()