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

3

我有一个用C语言编写的Python模块,我想在模块被卸载时调用一个函数。 我显然有一个initfoo函数来初始化模块 - 有没有办法告诉Python在取消初始化模块时调用finifoo函数?

atexit是我唯一的选择吗?

1个回答

4

在Python 2中没有这个功能,但Python 3好像有。如果需要管理某些资源,建议将其放在模块级对象中 - 我相信在卸载模块时这些对象会被垃圾回收。


从链接中可以看到:

目前,扩展模块通常只初始化一次,然后永远“存在”。唯一的例外是在调用Py_Finalize()时:然后会再次调用初始化函数。

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


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接