Python中atexit模塊的基本使用示例
atexit模塊很簡單,只定義了一個register函數(shù)用于注冊程序退出時的回調(diào)函數(shù),我們可以在這個回調(diào)函數(shù)中做一些資源清理的操作。
注:如果程序是非正常crash,或者通過os._exit()退出,注冊的回調(diào)函數(shù)將不會被調(diào)用。
我們也可以通過sys.exitfunc來注冊回調(diào),但通過它只能注冊一個回調(diào),而且還不支持參數(shù)。所以建議大家使用atexit來注冊回調(diào)函數(shù)。但千萬不要在程序中同時使用這兩種方式,否則通過atexit注冊的回調(diào)可能不會被正常調(diào)用。其實(shí)通過查閱atexit的源碼,你會發(fā)現(xiàn)原來它內(nèi)部是通過sys.exitfunc來實(shí)現(xiàn)的,它先把注冊的回調(diào)函數(shù)放到一個列表中,當(dāng)程序退出的時候,按先進(jìn)后出的順序調(diào)用注冊的回調(diào)。如果回調(diào)函數(shù)在執(zhí)行過程中拋出了異常,atexit會打印異常的文字信息,并繼續(xù)執(zhí)行下一下回調(diào),直到所有的回調(diào)都執(zhí)行完畢,它會重新拋出最后接收到的異常。
如果使用的python版本是2.6,還可以用裝飾器的語法來注冊回調(diào)函數(shù)。
下面是一個例子,展示了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
下面是程序運(yùn)行的結(jié)果,可以看到回調(diào)函數(shù)執(zhí)行的順序與它們被注冊的順序剛才相反。
相關(guān)文章
python開發(fā)實(shí)例之Python的Twisted框架中Deferred對象的詳細(xì)用法與實(shí)例
這篇文章主要介紹了python開發(fā)實(shí)例之Python的Twisted框架中Deferred對象的詳細(xì)用法與實(shí)例,需要的朋友可以參考下2020-03-03Python的內(nèi)建模塊itertools的使用解析
這篇文章主要介紹了Python的內(nèi)建模塊itertools的使用解析,itertools是python的迭代器模塊,itertools提供的工具相當(dāng)高效且節(jié)省內(nèi)存,Python的內(nèi)建模塊itertools提供了非常有用的用于操作迭代對象的函數(shù),需要的朋友可以參考下2023-09-09對Python 簡單串口收發(fā)GUI界面的實(shí)例詳解
今天小編就為大家分享一篇對Python 簡單串口收發(fā)GUI界面的實(shí)例詳解,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧2019-06-06使用python os模塊復(fù)制文件到指定文件夾的方法
今天小編就為大家分享一篇使用python os模塊復(fù)制文件到指定文件夾的方法,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧2019-08-08pandas.concat實(shí)現(xiàn)DataFrame豎著拼接、橫著拼接方式
這篇文章主要介紹了pandas.concat實(shí)現(xiàn)DataFrame豎著拼接、橫著拼接方式,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教2023-10-10Python實(shí)現(xiàn)的Kmeans++算法實(shí)例
這篇文章主要介紹了Kmeans和kmeans++算法,講解了Kmeans算法的缺點(diǎn)和kmeans++算法的實(shí)現(xiàn)思路,以及Python和matlab中實(shí)現(xiàn)的Kmeans++算法,需要的朋友可以參考下2014-04-04python實(shí)現(xiàn)簡單圖書管理系統(tǒng)
這篇文章主要為大家詳細(xì)介紹了python實(shí)現(xiàn)簡單圖書管理系統(tǒng),文中示例代碼介紹的非常詳細(xì),具有一定的參考價值,感興趣的小伙伴們可以參考一下2019-11-11