首页 > 解决方案 > CFFI:只要缓冲区引用它,就保持 cdata 处于活动状态

问题描述

我已经通过 CFFI 包装了 C 库,并且我希望我的 Python 对象为底层 C 数据提供缓冲区接口。我有这样的事情:

class Series(object):
    def __init__(self):
        self._series = ffi.gc(new_series(), free_series)
        self.rawdata = ffi.buffer(self._series.data, self._series.len)

问题是self.rawdata它不能保持self._series活力。如果我执行以下操作,则会出现段错误:

var = Series()
var = series.rawdata # Series object is garbage collected and free_series is called
print(bytes(var)) # at this point memory pointed by buffer is deallocated

我试图通过使用ffi.gcto 返回的对象来解决这个问题ffi.buffer,但遗憾的是返回的类型ffi.buffer不被接受。

标签: pythonpython-cfficffi

解决方案


推荐阅读