Python:全局对象销毁

时间:2013-03-20 23:15:36

标签: python

我有一个全局实例,当Python解释器退出时,我希望它被销毁(函数__del__被调用)。我是否期望过多的Python解释器? 我测试它的方法是在__del__函数中打印,从命令行运行python.exe,然后按Ctrl / Break。此时,我希望在命令行窗口中看到打印。但是,我没有。

2 个答案:

答案 0 :(得分:6)

是的,你期待的太多了。关于调用__del__的Python doesn't make any guarantees

  

无法保证在解释器退出时仍然存在的对象调用__del__()方法。

编辑:

通常,您应该避免使用__del__。对于大多数情况,上下文管理器更好对于极少数情况,当您需要确保在解释器退出时清除某些外部(即从C代码分配)资源时,可以使用atexit module

答案 1 :(得分:3)

您可以为signal.SIGBREAK信号添加处理程序。这样您就可以拦截ctrl + break。表格the documentation

import signal, os

def handler(signum, frame):
    print 'Someone is trying to exit!', signum

signal.signal(signal.SIGBREAK, handler)