【发布时间】:2010-10-20 03:26:27
【问题描述】:
我有一个用 C 编写的 python 模块,我想添加一个在卸载模块时调用的函数。我显然有一个 initfoo 函数来初始化模块——有没有办法告诉 python 在取消初始化模块时调用 finifoo 函数?
atexit 是我唯一的选择吗?
【问题讨论】:
标签: python c python-module
我有一个用 C 编写的 python 模块,我想添加一个在卸载模块时调用的函数。我显然有一个 initfoo 函数来初始化模块——有没有办法告诉 python 在取消初始化模块时调用 finifoo 函数?
atexit 是我唯一的选择吗?
【问题讨论】:
标签: python c python-module
不是在 Python 2 中,而是在 Python 3 seems to 中。如果您需要管理某些资源,我建议将其放在模块级对象中——我很确定在卸载模块时这些资源将被垃圾收集。
来自链接:
目前,扩展模块是 通常初始化一次然后 永远“活着”。唯一的例外是 当 Py_Finalize() 被调用时:那么 初始化例程被调用 第二次。
这表明您可以在初始化程序中设置一个静态布尔值,每次调用都会翻转。检查它的状态以查看模块是否正在完成。
【讨论】: