У меня действительно очень похожая проблема с Python Карта пула многопроцессорной обработки: AttributeError: Невозможно выбрать локальный объект
Мне кажется, я понимаю, в чем проблема, я просто не уверен, как это исправить. «Pool.map» нуждается в функции верхнего уровня в качестве входных данных. Но я не знаю, как мне переписать эту проблему:
Упрощенная версия кода:
import os as os
from multiprocessing import Pool
import numpy as np
def opti_fun_data(prediction):
def opti_fun(x):
def error_fun(i):
return error_fun_opti(x,prediction,i)
try:
pool = Pool(np.max([os.cpu_count()-1,1]))
error = np.mean(pool.map(error_fun, range(M)))
finally: # To make sure processes are closed in the end, even if errors happen
pool.close()
pool.join()
return error
return opti_fun
Если я запускаю opti_fun_data(prediction)(x0)
, я получаю
Can't pickle local object 'opti_fun_data.<locals>.opti_fun.<locals>.error_fun'
Я новичок в многопроцессорной библиотеке и могу использовать руку помощи. Для тех, кто интересуется небольшим опытом: я хочу минимизировать функцию «opti_fun» для множества различных сценариев / прогнозов. Вычисление моего показателя ошибки / эталона ("error_fun_opti") является достаточно интенсивным вычислительным процессом, поэтому я пытаюсь распараллелить этот шаг.