python - 如何让我的 SWIG 扩展模块与 Pickle 一起工作?

标签 python swig pickle

我有一个 Python 扩展模块,它使用 SWIG 作为包装器,我尝试用 Pickle 序列化它,但我失败了 =)

  1. 如果有人有可以 pickle 的 SWIG 扩展源,我很乐意看到它!
  2. 看来我应该实现__reduce_ex__我的 C++ 代码中的方法。有没有人有 __reduce_ex__ 的例子? There is similar Stackoverflow question但它省略了 manager_constructor 规范和实现。

最佳答案

似乎我找到了适合我的简单解决方案:

假设我们有类 C 是用 SWIG 生成的,然后我们用

包装它
class PickalableC(C, PickalableSWIG):

    def __init__(self, *args):
        self.args = args
        C.__init__(self)

PickalableSWIG

class PickalableSWIG:

    def __setstate__(self, state):
        self.__init__(*state['args'])

    def __getstate__(self):
        return {'args': self.args}

然后

pickle.loads(pickle.dumps(C()))

失败了,但是

pickle.loads(pickle.dumps(PickalableC()))

成功 =)

关于python - 如何让我的 SWIG 扩展模块与 Pickle 一起工作?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9310053/

相关文章:

python - Pygame Mixer.music无法读取mp3流

python - 按自定义键对字符串列表进行排序

python - %exception 被 SWIG(python) 包装器忽略了吗?

python - 在 kivy 退出时做点什么

python - 自定义 Django 表单未显示 - 使用 Wagtail

python - 如何安装 C++ 库的 python 绑定(bind)

python - 在 Python 中,如何访问由 SWIG 包装的 uint16[3] 数组(即打开 PySwigObject)?

存储pickle'd数据时出现DjangoUnicodeDecodeError

python - Pickle,读入数据,不支持的 pickle 协议(protocol) : 3 python 2. 7

python - cProfile 在运行多处理 Python 代码时导致 pickle 错误