atexit 是 python 的内置模块,可以直接import atexit
导入,可用于程序结束时指定函数调用。
import atexit
def exit_func():
print("code exiting!")
atexit.register(exit_func)
a = 1
b = 2
...
运行该程序后,会打印输出code exiting!
也可以使用修饰器的方法来写
import atexit
@atexit.register
def exit_func():
print("code exiting!")
a = 1
b = 2
...
同样会输出code exiting!
如果不想输出,可以使用atexit.unregister()
import atexit
@atexit.register
def exit_func():
print("code exiting!")
a = 1
b = 2
atexit.unregister(exit_func)
...
Python官方文档
如果之前没有注册则什么都不做,如果注册了多次,则会全部移除。
其中那句Equality comparisons(==) are used internally during unregistration指的是在unregister的时候 是根据 == 来判断的。
如:
import atexit
class MyClass:
def __call__(self):
print("exiting!")
def __eq__(self, other):
if isinstance(other, MyClass):
return True
return False
if __name__ == '__main__':
f1 = MyClass()
f2 = MyClass()
atexit.register(f1)
atexit.unregister(f2)
此时是不会有输出的,因为虽然unregister的是f2,但是f1 == f2。
如果打印一下f1 == f2
,返回值是True
。