是否有一个用C语言编写的python模块的fini例程?

时间:2009-04-17 15:40:25

标签: python c python-module

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

atexit是我唯一的选择吗?

1 个答案:

答案 0 :(得分:4)

不是在Python 2中,而是Python 3 seems to。如果你需要管理一些资源,我建议把它放在模块级对象中 - 我很确定在卸载模块时会对它们进行垃圾收集。


从链接:

  

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

这表明您可以在初始化程序中设置一个静态布尔值,该布尔值会在每次调用时被翻转。检查状态以查看模块是否正在最终确定。