Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/294.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何在Python C API中调用memoryview上的release_Python_Python C Api_Memoryview - Fatal编程技术网

如何在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将处于不一致的状态,仍然认为它拥有一个有效的缓冲区,那么事情就会破裂