在 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 扩展模块时运行函数的主要内容,如果未能解决你的问题,请参考以下文章