我有一个要与multiprocessing.Pool并行使用的类方法。由于类实例不可腌制,因此我使用了以下内容:
import copy_reg
import types
def _reduce_method(m):
if m.im_self is None:
return getattr, (m.im_class, m.im_func.func_name)
else:
return getattr, (m.im_self, m.im_func.func_name)
copy_reg.pickle(types.MethodType, _reduce_method)
这没问题。但是,在我的课堂上,我使用GDAL模块(https://pypi.org/project/GDAL/)来处理地理空间图像和数据。所以现在,我收到以下错误:
cPickle.PicklingError: Can't pickle <type 'SwigPyObject'>: attribute lookup __builtin__.SwigPyObject failed
我正在使用Python 2.7.10。我知道我可以使用Python 3或使用Pathos而不是Multiprocessing解决Pool的问题,但是由于计算机上的网络限制,我无法轻松实现这两个问题。
我花了一些时间寻找解决方案,但无济于事。我已经找到了一些潜在的解决方案(例如How to make my SWIG extension module work with Pickle?),但是我不确定如何实现它们,因为我没有在代码中故意创建SWIG对象,但是由于GDAL,它一定会出现
是否有一种方法可以像使用上面的“ instancemethod”类型那样使用copy_reg将“ SwigPyObject”类型注册为可腌制的?