如何在Python中使用copy_reg.pickle注册'SwigPyObject类型?

时间:2018-06-26 09:01:35

标签: python multiprocessing pickle swig gdal

我有一个要与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”类型注册为可腌制的?

0 个答案:

没有答案