3

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

atexit我唯一的选择吗?

4

1 回答 1

4

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


从链接:

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

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

于 2009-04-17T15:52:00.080 回答