Python中atexit模块的基本使用示例


Posted in Python onJuly 08, 2015

atexit模块很简单,只定义了一个register函数用于注册程序退出时的回调函数,我们可以在这个回调函数中做一些资源清理的操作。

注:如果程序是非正常crash,或者通过os._exit()退出,注册的回调函数将不会被调用。

我们也可以通过sys.exitfunc来注册回调,但通过它只能注册一个回调,而且还不支持参数。所以建议大家使用atexit来注册回调函数。但千万不要在程序中同时使用这两种方式,否则通过atexit注册的回调可能不会被正常调用。其实通过查阅atexit的源码,你会发现原来它内部是通过sys.exitfunc来实现的,它先把注册的回调函数放到一个列表中,当程序退出的时候,按先进后出的顺序调用注册的回调。如果回调函数在执行过程中抛出了异常,atexit会打印异常的文字信息,并继续执行下一下回调,直到所有的回调都执行完毕,它会重新抛出最后接收到的异常。

如果使用的python版本是2.6,还可以用装饰器的语法来注册回调函数。

下面是一个例子,展示了atexit模块的使用:
 

import atexit
 
def exit0(*args, **kwarg):
  print 'exit0'
  for arg in args:
    print ' ' * 4, arg
 
  for item in kwarg.items():
    print ' ' * 4, item
 
def exit1():
  print 'exit1'
  raise Exception, 'exit1'
 
def exit2():
  print 'exit2'  
 
atexit.register(exit0, *[1, 2, 3], **{ "a": 1, "b": 2, })
atexit.register(exit1)
atexit.register(exit2)
 
@atexit.register
def exit3():
  print 'exit3'
 
if __name__ == '__main__':
  pass

下面是程序运行的结果,可以看到回调函数执行的顺序与它们被注册的顺序刚才相反。

Python中atexit模块的基本使用示例

Python 相关文章推荐
python中遍历文件的3个方法
Sep 02 Python
Python使用Matplotlib实现雨点图动画效果的方法
Dec 23 Python
django进阶之cookie和session的使用示例
Aug 17 Python
python DataFrame 取差集实例
Jan 30 Python
Python实现的服务器示例小结【单进程、多进程、多线程、非阻塞式】
May 23 Python
Django ORM 自定义 char 类型字段解析
Aug 09 Python
解决Pycharm的项目目录突然消失的问题
Jan 20 Python
使用python-pptx包批量修改ppt格式的实现
Feb 14 Python
Pycharm中配置远程Docker运行环境的教程图解
Jun 11 Python
Python手动或自动协程操作方法解析
Jun 22 Python
基于Python的接口自动化读写excel文件的方法
Jan 15 Python
python生成随机数、随机字符、随机字符串
Apr 06 Python
python登录豆瓣并发帖的方法
Jul 08 #Python
python发送HTTP请求的方法小结
Jul 08 #Python
python友情链接检查方法
Jul 08 #Python
Python抓取百度查询结果的方法
Jul 08 #Python
Python抓取淘宝下拉框关键词的方法
Jul 08 #Python
Python根据区号生成手机号码的方法
Jul 08 #Python
Python写入CSV文件的方法
Jul 08 #Python
You might like
mysql 字段类型说明
2007/04/27 PHP
php实现用户在线时间统计详解
2011/10/08 PHP
PHPExcel读取Excel文件的实现代码
2011/12/06 PHP
smarty模板引擎从php中获取数据的方法
2015/01/22 PHP
WordPress中邮件的一些修改和自定义技巧
2015/12/15 PHP
php格式化时间戳
2016/12/17 PHP
php实现微信小程序授权登录功能(实现流程)
2019/11/13 PHP
火狐textarea输入法的bug的触发及解决
2013/07/24 Javascript
js隐式全局变量造成的bug示例代码
2014/04/22 Javascript
js实现创建删除html元素小结
2015/09/30 Javascript
Backbone View 之间通信的三种方式
2016/08/09 Javascript
Bootstrap警告框(Alert)插件使用方法
2017/03/21 Javascript
ES6新特性二:Iterator(遍历器)和for-of循环详解
2017/04/20 Javascript
Bootstrap Tooltip显示换行和左对齐的解决方案
2017/10/11 Javascript
node.js实现微信开发之获取用户授权
2019/03/18 Javascript
亲自动手实现vue日历控件
2019/06/26 Javascript
UEditor 自定义图片视频尺寸校验功能的实现代码
2020/10/20 Javascript
vue 获取url里参数的两种方法小结
2020/11/12 Javascript
[01:11:48]Fnatic vs IG 2018国际邀请赛小组赛BO2 第二场 8.17
2018/08/18 DOTA
windows下python安装paramiko模块和pycrypto模块(简单三步)
2017/07/06 Python
django的登录注册系统的示例代码
2018/05/14 Python
Python数据分析matplotlib设置多个子图的间距方法
2018/08/03 Python
使用Python开发SQLite代理服务器的方法
2018/12/07 Python
python 中 .py文件 转 .pyd文件的操作
2021/03/04 Python
瑞典Happy Socks美国官网:购买色彩斑斓的快乐袜子
2016/10/19 全球购物
世界上最伟大的马产品:Equiderma
2020/01/07 全球购物
实体的生命周期
2013/08/31 面试题
应届生文秘专业个人自荐信格式
2013/09/21 职场文书
农村婚礼证婚词
2014/01/08 职场文书
九年级家长会邀请函
2014/01/15 职场文书
《乞巧》教学反思
2014/02/27 职场文书
2014年秋季开学寄语
2014/08/02 职场文书
工人先进事迹材料
2014/12/26 职场文书
导盲犬小Q观后感
2015/06/11 职场文书
2015年政治教研组工作总结
2015/07/22 职场文书
阿里云Nginx配置https实现域名访问项目(图文教程)
2021/03/31 Servers