在 python 2 上释放 C 扩展模块时运行函数

Posted

技术标签:

【中文标题】在 python 2 上释放 C 扩展模块时运行函数【英文标题】:Run a function when a C extension module is freed on python 2 【发布时间】:2014-01-11 13:44:33 【问题描述】:

我有一个用于 Python 的 C 扩展模块。

当模块初始化时,我 malloc() 一些我只在 C 代码中使用的内存。

我想在模块被释放时释放这块内存。

Python 3 在 PyModuleDef 结构上有 m_free 成员,这正是我想要的。问题是我在 Python 2 中找不到等效的功能。

如何在 Python 2 中释放 malloc 的内存?

【问题讨论】:

【参考方案1】:

我想没有直接的等价物,这就是 m_free 在 3.0 中引入的原因,详见pep 3121

目前,扩展模块通常初始化一次,然后永远“存活”。唯一的例外是调用 Py_Finalize() 时:然后第二次调用初始化例程。从资源管理的角度来看,这很糟糕:内存和其他资源可能会在每次调用初始化时被分配,但没有办法回收它们。因此,目前没有办法完全释放 Python 分配的所有资源。

【讨论】:

以上是关于在 python 2 上释放 C 扩展模块时运行函数的主要内容,如果未能解决你的问题,请参考以下文章

用C或C ++扩展(翻译)

尝试编译C扩展模块时缺少Python.h

使用 C 扩展 python 时发现内存泄漏

无法在我的 python C 扩展上启动 dbg

Python知识点记录二(包和模块)

ctypes给扩展模块中的函数传递数组和结构体