是否有用 C 编写的 python 模块的 fini 例程?

Posted

技术标签:

【中文标题】是否有用 C 编写的 python 模块的 fini 例程?【英文标题】:Is there a fini routine for a python module written in C? 【发布时间】:2010-10-20 03:26:27 【问题描述】:

我有一个用 C 编写的 python 模块,我想添加一个在卸载模块时调用的函数。我显然有一个 initfoo 函数来初始化模块——有没有办法告诉 python 在取消初始化模块时调用 finifoo 函数?

atexit 是我唯一的选择吗?

【问题讨论】:

【参考方案1】:

不是在 Python 2 中,而是在 Python 3 seems to 中。如果您需要管理某些资源,我建议将其放在模块级对象中——我很确定在卸载模块时这些资源将被垃圾收集。


来自链接:

目前,扩展模块是 通常初始化一次然后 永远“活着”。唯一的例外是 当 Py_Finalize() 被调用时:那么 初始化例程被调用 第二次。

这表明您可以在初始化程序中设置一个静态布尔值,每次调用都会翻转。检查它的状态以查看模块是否正在完成。

【讨论】:

以上是关于是否有用 C 编写的 python 模块的 fini 例程?的主要内容,如果未能解决你的问题,请参考以下文章

C ++ - 我是否正确使用fin.ignore()?

C ++中的fin是否可以与.doc文件一起使用?

Python 的 yfinance 和 yahoo_fin 最近是不是停止工作?

使用C语言为python编写动态模块--解析python中的对象如何在C语言中传递并返回

Python 计算器 - 隐式数学模块

inspect:获取python对象的有用信息