【发布时间】:2014-06-20 22:38:43
【问题描述】:
在我看来,缓冲区协议更适合将 Python 缓冲区暴露给 C。
我找不到使用现有缓冲区创建字节对象而不在 C 中复制的方法。
基本上我想要的是实现类似于 PyBytes_FromStringAndSize() 但不复制的东西,并在释放对象时使用回调来释放缓冲区。在收到从 C API 返回的缓冲区之前,我不知道缓冲区有多大。因此,先在 Python 中创建字节对象,然后再填充它不是一种选择。
我还查看了 memoryview,PyMemoryView_FromMemory() 不会复制,但无法传递回调来释放我的缓冲区。而且我不使用 Python lib(例如 Psycopg)是否可以使用 memoryview 对象。
我是否必须创建自己的对象才能满足这两个要求?还有什么捷径?
如果必须,我如何确保这个对象与字节一样工作,以便我可以安全地将它传递给 Python 库?
谢谢。
【问题讨论】:
标签: python-3.x python-c-api python-c-extension