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以环状形式组合排列图片并输出的方法
Mar 17 Python
Python单元测试框架unittest使用方法讲解
Apr 13 Python
Python脚本判断 Linux 是否运行在虚拟机上
Apr 25 Python
Python自动化运维和部署项目工具Fabric使用实例
Sep 18 Python
python获取指定时间差的时间实例详解
Apr 11 Python
Django框架组成结构、基本概念与文件功能分析
Jul 30 Python
PyCharm 2019.3发布增加了新功能一览
Dec 08 Python
Python使用requests xpath 并开启多线程爬取西刺代理ip实例
Mar 06 Python
django实现将修改好的新模型写入数据库
Mar 31 Python
python中出现invalid syntax报错的几种原因分析
Feb 12 Python
 python中的元类metaclass详情
May 30 Python
python实现一个简单的贪吃蛇游戏附代码
Jun 28 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的论坛(3)
2006/10/09 PHP
PHP写的获取各搜索蜘蛛爬行记录代码
2012/08/21 PHP
php获取域名的google收录示例
2014/03/24 PHP
PHP之sprintf函数用法详解
2014/11/12 PHP
php车辆违章查询数据示例
2016/10/14 PHP
PHP开发实现微信退款功能示例
2017/11/25 PHP
Sample script that displays all of the users in a given SQL Server DB
2007/06/16 Javascript
js 单引号 传递方法
2009/06/22 Javascript
jquery中的事件处理详细介绍
2013/06/24 Javascript
JS获取url链接字符串 location.href
2013/12/23 Javascript
浅析Node在构建超媒体API中的作用
2014/07/30 Javascript
jQuery实现动态表单验证时文本框抖动效果完整实例
2015/08/21 Javascript
jQuery Mobile页面返回不需要重新get
2016/04/26 Javascript
详解Vue2.0里过滤器容易踩到的坑
2017/06/01 Javascript
详解vue2.0+axios+mock+axios-mock+adapter实现登陆
2018/07/19 Javascript
react 兄弟组件如何调用对方的方法示例
2018/10/23 Javascript
vue+Element实现搜索关键字高亮功能
2019/05/28 Javascript
Vue中el-form标签中的自定义el-select下拉框标签功能
2020/04/20 Javascript
JavaScript的垃圾回收机制与内存管理
2020/08/06 Javascript
Python使用PyGreSQL操作PostgreSQL数据库教程
2014/07/30 Python
python多重继承实例
2014/10/11 Python
PyTorch线性回归和逻辑回归实战示例
2018/05/22 Python
python 实现提取log文件中的关键句子,并进行统计分析
2019/12/24 Python
python构造函数init实例方法解析
2020/01/19 Python
使用Django清空数据库并重新生成
2020/04/03 Python
pytorch 移动端部署之helloworld的使用
2020/10/30 Python
Expedia挪威官网:酒店、机票和租车
2018/03/03 全球购物
《孔子游春》教学反思
2014/02/25 职场文书
教师个人读书活动总结
2014/07/08 职场文书
党员干部三严三实心得体会
2014/10/13 职场文书
2014年药店店长工作总结
2014/11/17 职场文书
学雷锋献爱心倡议书
2015/04/27 职场文书
纪检部部长竞选稿
2015/11/21 职场文书
php7中停止php-fpm服务的方法详解
2021/05/09 PHP
小程序wx.getUserProfile接口的具体使用
2021/06/02 Javascript
PostgreSQL自动更新时间戳实例代码
2021/11/27 PostgreSQL