我有一个用C编写的python模块,我想添加一个在卸载模块时调用的函数。我显然有一个initfoo
函数来初始化模块 - 有没有办法让python在未初始化模块时调用finifoo
函数?
atexit
是我唯一的选择吗?
答案 0 :(得分:4)
不是在Python 2中,而是Python 3 seems to。如果你需要管理一些资源,我建议把它放在模块级对象中 - 我很确定在卸载模块时会对它们进行垃圾收集。
从链接:
目前,扩展模块是 通常初始化一次然后 “活着”永远。唯一的例外是 当调用Py_Finalize()时:然后 初始化例程被调用了 第二次。
这表明您可以在初始化程序中设置一个静态布尔值,该布尔值会在每次调用时被翻转。检查状态以查看模块是否正在最终确定。