Python PicklingError:Can';t pickle<;类型';功能'>;:属性查找内置函数失败(多处理)

Python PicklingError:Can';t pickle<;类型';功能'>;:属性查找内置函数失败(多处理),python,Python,我将要实现一种时间序列聚类方法,我的优化解决方案是基于frank-wolfe算法的。 我想通过python中的多处理库将其并行化,但我面临以下问题: Traceback (most recent call last): File "/home/ridha/Downloads/pycharm-2018.1.2/helpers/pyde/pydev_run_in_console.py", line 52, in run_file pydev_imports.execfile(file, globa

我将要实现一种时间序列聚类方法,我的优化解决方案是基于frank-wolfe算法的。 我想通过python中的多处理库将其并行化,但我面临以下问题:

Traceback (most recent call last):
File "/home/ridha/Downloads/pycharm-2018.1.2/helpers/pyde/pydev_run_in_console.py", line 52, in run_file

pydev_imports.execfile(file, globals, locals)  # execute the script

File "/home/ridha/Desktop/TICC-FW/TICC-master/example.py", line 8, in <module>
(cluster_assignment, cluster_MRFs) = ticc.fit(input_file=fname)

File "/home/ridha/Desktop/TICC-FW/TICC-master/TICC_solver.py", line 111, in fit
train_cluster_inverse)

File "/home/ridha/Desktop/TICC-FW/TICC-master/TICC_solver.py", line 295, in optimize_clusters
val = optRes[cluster].get()

File "/home/ridha/anaconda2/lib/python2.7/multiprocessing/pool.py", line 572, in get
raise self._value

PicklingError: Can't pickle <type 'function'>: attribute lookup __builtin__.function failed

如果您能提供任何帮助,我将不胜感激。

不久前我在多处理方面也遇到过同样的问题,我现在正在使用一个名为
pathos
的自定义多处理库,但您必须自己编译该库,然后使用
pip
安装它。经历了这一切麻烦之后,我发现兰姆达是不能腌制的。我在代码中只看到一些使用它的参数名,但我看不到调用函数本身的任何内容,如果有,请尝试替换它。
也要避免在另一个方法或函数中定义任何方法或函数。

请更正示例的缩进部分?
loss
是函数中的一个函数吗?您可能需要调整此解决方案以适应您的问题:您的stacktrace和示例代码根本不匹配。你能提供产生错误的代码吗?首先,我想知道我们能并行单纯形法吗?!因为,frank wolfe算法通过单纯形法来优化我的问题!
probSize = self.window_size * size_blocks

lamb = np.zeros((probSize, probSize)) + self.lambda_parameter

S = np.cov(np.transpose(D_train))
empirical_covariances[cluster] = S

# rho = 1

lamb_vec = lamb.flatten()
lamb_vec_abs = np.absolute(lamb_vec)
s_vec = S.flatten()

aub = np.identity(probSize*probSize)
bub = np.ones(probSize*probSize)

def loss(x):

    theta = np.reshape(x, (probSize, probSize))
    det_theta = -np.linalg.det(theta)

    return det_theta + (np.matmul(s_vec, x)) + (
        np.matmul(lamb_vec_abs, np.absolute(x)))

solver = FrankWolfe(f=loss,
                    g=None, A_ub=aub, b_ub=bub, A_eq=None, b_eq=None, bounds=None,
                    tol=1.0E-12, gradient_delta=1.0E-10, iteration_limit=1000)

# solver.verbose = True

# apply to process pool

optRes[cluster] = pool.apply_async(solver)