在《Python高手之路》第二章,标准库这一章,讲到了一些必须了解的标准库模块,有一些,是我之前就用到过的,类似codecs的库(有相见恨晚的感觉);也有一些库,,属于没有接触过的,可以在《Python标准库》里进行查询到相应的介绍和应用。
1、atexit:允许注册在程序退出时调用的函数!(标准库14.11章)https://docs.python.org/2/library/atexit.html
那么,什么时候用atexit, os._exit(), sys.exit(), sys.exitfunc 那?
首先,os._exit() 和 sys.exit() 都是直接退出,后面代码不执行的;
import sys
print "hello"
sys.exit(1)
print "there"
代码退出,结果是 打印了 "hello"
区别在于, sys.exit()是触发了一个SystemExit 异常的,那么就可以捕获这个异常,来进行相应的操作;
import sys
print "hello"
try:
sys.exit(1)
except SystemExit:
print "world"
而 os._exit()是直接退出,后续代码不执行,调用的是C语言的 _exit()
import sys
def exitfunc():
print "world"
sys.exitfunc = exitfunc
print "hello"
sys.exit(1)
print "there"
而atexit是可以注册多个退出函数,并向注册的传递函数传递参数。这对于妥善的断开数据库连接,删除临时文件等可能很有用。不用为需要释放的资源维护一个特殊的列表,完全可以对于每个资源注册一个单独的清理函数。
import atexit
def my_clean(name):
print 'my clean (%s)' % name
atexit.register(my_clean, 'first')
atexit.register(my_clean, 'second')
atexit.register(my_clean, 'third')
my clean (third)
my clean(second)
my clean(first)