bde*_*dew 7 python api python-3.x
我有一个用cython编写的库,它包装了一个C库,我将一些c字符串暴露给python代码.这些字符串很大,而且是静态的(不能释放它们)所以只是从它们那里制作一个python字符串(这就是副本)不是一个选项 - 我得到了OOM错误.
我有代码工作python 2.x目前使用旧的缓冲API,看起来或多或少像:
def get_foo():
return PyBuffer_FromMemory(c_foo_ptr,c_foo_len)
Run Code Online (Sandbox Code Playgroud)
这对于python 2.x来说是有效的(tm),但是旧的缓冲API在3.x中消失了,我无法弄清楚如何使用新的缓冲API.
我看到PyMemoryView_FromBuffer和PyBuffer_FillInfo结合起来应该做同样的事情,但PyBuffer_FillInfo想要一个对我来说不存在的对象(它只是一个模块级函数),制作一个虚拟对象并传递它只是给了我一个段错误,所以我想这个对象应该以某种方式支持缓冲区......但它的文档记录在哪里?
进一步尝试使用内存视图,它们根本不会看起来或充当字符串(或字节),因此我必须重写所有的python代码或以某种方式重新创建该功能.
我错过了什么吗?有没有一种简单的方法来替换py3k中的PyBuffer_FromMemory?
注意:我正在使用cython,但这是原始c-api的东西,所以你可以在不涉及cython的情况下回答它.
归档时间: |
|
查看次数: |
716 次 |
最近记录: |