我有一个非常类似的问题 Python Multiprocessing Pool Map: AttributeError: Can't pickle local object
我想我了解问题所在,只是不知道如何解决。“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\u fun\u opti”)是一项安静的计算密集型工作,因此我尝试将这一步骤并行化
将函数提升到顶层,并使用
functools.partial
提供作用域值,而不是嵌套作用域相关问题 更多 >
编程相关推荐