是否有用 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 例程?的主要内容,如果未能解决你的问题,请参考以下文章
Python 的 yfinance 和 yahoo_fin 最近是不是停止工作?