如何在Python C API中调用memoryview上的release
我有一个现有的如何在Python C API中调用memoryview上的release,python,python-c-api,memoryview,Python,Python C Api,Memoryview,我有一个现有的PyMemoryView对象,我想“释放”它以使memoryview对象无效 我可以通过PyObject\u CallMethodAPI调用release函数: if (PyMemoryView_Check(obj)) { PyObject_CallMethod(obj, "release", NULL); } 这很好,但我想使用更直接的方法 我试过这个: if (PyMemoryView_Check(obj)) { PyBuffer_Release(PyMemoryVi
PyMemoryView对象
,我想“释放”它以使memoryview
对象无效
我可以通过PyObject\u CallMethod
API调用release
函数:
if (PyMemoryView_Check(obj)) {
PyObject_CallMethod(obj, "release", NULL);
}
这很好,但我想使用更直接的方法
我试过这个:
if (PyMemoryView_Check(obj)) {
PyBuffer_Release(PyMemoryView_GET_BUFFER(obj));
}
但是,这不起作用,我仍然能够用Python从缓冲区读/写。事实上,PyBuffer\u Release
的文档说明:
/*释放从getbuffer ParseTuple的“s*”获取的Py_缓冲区*/
这方面没有C API调用。您必须执行一个方法调用。(对于许多您可能希望从C调用的方法来说,情况就是这样。) 不要试图在memoryview的底层
Py\u buffer
上调用PyBuffer\u Release
。memoryview负责这样做,并跟踪是否已经这样做。如果您试图自己释放缓冲区,memoryview将处于不一致的状态,仍然认为它拥有一个有效的缓冲区,那么事情就会破裂