【问题标题】:Is there a fini routine for a python module written in C?是否有用 C 编写的 python 模块的 fini 例程?
【发布时间】:2010-10-20 03:26:27
【问题描述】:

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

atexit 是我唯一的选择吗?

【问题讨论】:

    标签: python c python-module


    【解决方案1】:

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


    来自链接:

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

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

    【讨论】:

      猜你喜欢
      • 2012-02-28
      • 1970-01-01
      • 2016-07-07
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-02-04
      • 1970-01-01
      相关资源
      最近更新 更多