atexit

atexit模块定义了一个单一的函数来注册清除函数。这样注册的函数在正常解释器终止时自动执行。 atexit以它们注册的相反顺序运行这些函数;如果您注册A,B和C,在解释器终止时,它们将按顺序C,B,A运行。


注意:当检测到Python致命内部错误或者调用os._exit()时,如果程序被未处理的信号杀死,则不会调用通过此模块注册的函数。


这是sys.exitfunc()变量提供的功能的替代接口。


注意:当与设置sys.exitfunc的其他代码一起使用时,此模块不太可能正常工作。特别是,其他核心的Python模块可以免费使用atexit,没有程序员的知识。使用sys.exitfunc的作者应该将其代码转换为使用atexit。转换设置sys.exitfunc的代码的最简单的方法是导入atexit并注册已绑定到sys.exitfunc的函数。


atexit.register(func [,* args [,** kargs]])
将func作为要在终止时执行的函数。任何要传递给func的可选参数必须作为参数传递给register()。可以多次注册相同的函数和参数。


在正常的程序终止(例如,如果sys.exit()被调用或主模块的执行完成),所有注册的函数以最后进先出的顺序调用。假设较低级别模块通常在较高级别模块之前导入,因此必须以后进行清理。


如果在执行退出处理程序期间引发异常,将打印回溯(除非引发SystemExit),并保存异常信息。在所有退出处理程序有机会运行后,最后一个异常被提出是重新提出。


在版本2.6中更改:此函数现在返回func,这使得它可以使用它作为装饰器。

以下简单示例演示了模块如何在导入时从文件初始化计数器,并在程序终止时自动保存计数器的更新值,而不依赖于在终止时明确调用该模块的应用程序。

try:
    _count = int(open("counter").read())
except IOError:
    _count = 0

def incrcounter(n):
    global _count
    _count = _count + n

def savecounter():
    open("counter", "w").write("%d" % _count)

import atexit
atexit.register(savecounter)
位置和关键字参数也可以传递给register(),以便在调用时传递给注册函数:

def goodbye(name, adjective):
    print 'Goodbye, %s, it was %s to meet you.' % (name, adjective)

import atexit
atexit.register(goodbye, 'Donny', 'nice')

# or:
atexit.register(goodbye, adjective='nice', name='Donny')
用作装饰器:

import atexit

@atexit.register
def goodbye():
    print "You are now leaving the Python sector."

来自:https://docs.python.org/2/library/atexit.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值