У меня есть большой (numpy ndarray) объект, память которого я хочу освободить, как только я закончу с ним в своем расширении Python (или у меня быстро закончится память).Как я могу безопасно это сделать?
Кажется, что в Python будет работать что-то вроде del arr
, за которым следует gc.collect()
, но я не хочу ждать, пока моя функция вернется.Я также рассмотрел ((PyObject*)arr)->ob_type->tp_dealloc((PyObject*)arr); Py_DECREF(arr)
для непосредственного вызова деструктора, но это, вероятно, приведет к ошибке сегментации в дальнейшем, поскольку я не уверен, что владею ссылкой (я получил ее из кортежа, переданного моей функции какPyObject* args
).
Другой вариант может состоять в том, чтобы освободить базовый массив C с помощью free
, заменить указатель данных ndarray на другой и соответствующим образом настроить форму и другие члены ndarray.Это кажется хакерским, но я просматриваю непонятный C API, чтобы увидеть, действительно ли это возможно.
Любые советы будут с благодарностью.Заранее спасибо.