如何保存包含指针的ctypes对象

时间:2012-03-19 10:04:19

标签: python ctypes pickle

我使用第三方库,经过大量计算后返回一个包含指针的ctypes对象。

如何保存ctypes对象以及指针指向以供以后使用? 我试过了

  • scipy.io.savemat => TypeError:无法将对象转换为数组
  • cPickle =>包含指针的ctypes对象无法被腌制

3 个答案:

答案 0 :(得分:7)

Python无法自动为您执行此操作:

您必须自己构建代码以选择所有需要的数据,将它们放入合适的Python数据结构中(或者只是将数据添加到一个唯一的字节字符串中,您将知道每个元素的偏移量) - 然后将该对象保存到磁盘。

这不是“Python”问题 - 当您使用Python对象和数据时,这正是Python解决的问题。在C级或更低级别编码时,您不仅要知道数据的位置,还要知道每个数据块的长度(并为每个块分配内存,并在完成后释放它们等)。这就是你在这种情况下必须做的事情。

您的数据结构不仅应该为您提供指针,还应该为您提供每个指向位置的数据长度(以某种方式或其他方式 - 如果指针指向另一个结构,“size_of”将对您有用)< / p>

答案 1 :(得分:0)

您可以将数据复制到Python数据结构中,并在使用指针的contents属性时取消引用指针。

答案 2 :(得分:0)

要挑选具有指针的ctypes对象,您必须定义自己的__getstate__ / __reduce__方法进行pickle,并__setstate__进行unpickling。有关pickle模块的文档中的更多信息。