Как освободить память рано для PyObject? - PullRequest
0 голосов
/ 29 декабря 2018

У меня есть большой (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, чтобы увидеть, действительно ли это возможно.

Любые советы будут с благодарностью.Заранее спасибо.

...