终止后未调用Python atexit.register



我正在处理一个程序,该程序需要在退出前立即调用一个函数,并且成功地使用atexit.register(myFunction(进行了调用,直到它停止工作。即使我尝试只运行一个简单的脚本,注册的函数也不会被调用。。。

这是一个简单的代码:

import atexit
def all_done():
print ('all_done()')
print ('Registering')
atexit.register(all_done)
print ('Registered')

输出为:

Registering
Registered

应该在什么时候:

Registering
Registered
all_done()

可能是什么问题?就像我说的,它工作了一段时间,然后突然停止了。

我最终没有使用atexit,而只是使用

try:
...
finally:
...

目前正在发挥作用。尽管如此,我仍然不知道为什么atexit不起作用。。。

欢迎,2年前的帖子。如果你有同样的问题:请记住,引用,"当程序被Python未处理的信号终止时,当检测到Python致命的内部错误时,或者当操作系统运行时,都不会调用通过该模块注册的函数_调用exit((">

这意味着像系统关闭或os._exit()这样的事情不会调用atexit函数,但像键盘中断或sys.exit()这样的事情没有问题。

示例:

import atexit
def all_done():
print ('all_done()')
print ('Registering')
atexit.register(all_done)
print ('Registered')
os._exit()

将输出

Registering
Registered

但是,这里的代码是:

import atexit
def all_done():
print ('all_done()')
print ('Registering')
atexit.register(all_done)
print ('Registered')
sys.exit()

将输出

Registering
Registered
all_done()

希望我能帮上忙!

来源:https://docs.python.org/3/library/atexit.html

最新更新