我有一个用 C 编写的 python 模块,我想添加一个在卸载模块时调用的函数。我显然有一个initfoo
初始化模块的函数——有没有办法告诉python在finifoo
取消初始化模块时调用一个函数?
是atexit
我唯一的选择吗?
我有一个用 C 编写的 python 模块,我想添加一个在卸载模块时调用的函数。我显然有一个initfoo
初始化模块的函数——有没有办法告诉python在finifoo
取消初始化模块时调用一个函数?
是atexit
我唯一的选择吗?
不是在 Python 2 中,但Python 3 似乎是. 如果您需要管理某些资源,我建议将其放在模块级对象中——我很确定在卸载模块时这些资源将被垃圾收集。
从链接:
目前,扩展模块通常初始化一次,然后永远“存活”。唯一的例外是调用 Py_Finalize() 时:然后第二次调用初始化例程。
这表明您可以在初始化程序中设置一个静态布尔值,每次调用都会翻转。检查它的状态以查看模块是否正在完成。