Python中atexit模塊的基本使用示例
atexit模塊很簡(jiǎn)單,只定義了一個(gè)register函數(shù)用于注冊(cè)程序退出時(shí)的回調(diào)函數(shù),我們可以在這個(gè)回調(diào)函數(shù)中做一些資源清理的操作。
注:如果程序是非正常crash,或者通過(guò)os._exit()退出,注冊(cè)的回調(diào)函數(shù)將不會(huì)被調(diào)用。
我們也可以通過(guò)sys.exitfunc來(lái)注冊(cè)回調(diào),但通過(guò)它只能注冊(cè)一個(gè)回調(diào),而且還不支持參數(shù)。所以建議大家使用atexit來(lái)注冊(cè)回調(diào)函數(shù)。但千萬(wàn)不要在程序中同時(shí)使用這兩種方式,否則通過(guò)atexit注冊(cè)的回調(diào)可能不會(huì)被正常調(diào)用。其實(shí)通過(guò)查閱atexit的源碼,你會(huì)發(fā)現(xiàn)原來(lái)它內(nèi)部是通過(guò)sys.exitfunc來(lái)實(shí)現(xiàn)的,它先把注冊(cè)的回調(diào)函數(shù)放到一個(gè)列表中,當(dāng)程序退出的時(shí)候,按先進(jìn)后出的順序調(diào)用注冊(cè)的回調(diào)。如果回調(diào)函數(shù)在執(zhí)行過(guò)程中拋出了異常,atexit會(huì)打印異常的文字信息,并繼續(xù)執(zhí)行下一下回調(diào),直到所有的回調(diào)都執(zhí)行完畢,它會(huì)重新拋出最后接收到的異常。
如果使用的python版本是2.6,還可以用裝飾器的語(yǔ)法來(lái)注冊(cè)回調(diào)函數(shù)。
下面是一個(gè)例子,展示了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í)行的順序與它們被注冊(cè)的順序剛才相反。

相關(guān)文章
這3個(gè)Python實(shí)時(shí)可視化工具包來(lái)幫你了解性能瓶頸
由于Python的動(dòng)態(tài)性和多功能性,它比其他語(yǔ)言的速度要慢.有時(shí)復(fù)雜的計(jì)算或算法需要大量時(shí)間才能在Python中執(zhí)行.因此需要跟蹤代碼的執(zhí)行流,深入了解性能瓶頸,需要的朋友可以參考下2021-06-06
Pytest+request+Allure實(shí)現(xiàn)接口自動(dòng)化框架
接口自動(dòng)化是指模擬程序接口層面的自動(dòng)化,由于接口不易變更,維護(hù)成本更小,所以深受各大公司的喜愛(ài),本文主要介紹了Pytest+request+Allure實(shí)現(xiàn)接口自動(dòng)化框架,感興趣的可以了解一下2021-07-07
python模擬鼠標(biāo)點(diǎn)擊和鍵盤輸入的操作
這篇文章主要介紹了python模擬鼠標(biāo)點(diǎn)擊和鍵盤輸入的操作,本文給大家介紹的非常詳細(xì),具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2019-08-08
Appium Python自動(dòng)化測(cè)試之環(huán)境搭建的步驟
這篇文章主要介紹了Appium Python自動(dòng)化測(cè)試之環(huán)境搭建的步驟,以32位的Windows 7操作系統(tǒng)為例介紹Appium+Python的環(huán)境搭建步驟,感興趣的小伙伴們可以參考一下2019-01-01
Pycharm中import torch報(bào)錯(cuò)的快速解決方法
這篇文章主要介紹了Pycharm中import torch報(bào)錯(cuò)的快速解決方法,很多朋友容易碰到這個(gè)問(wèn)題,今天小編特此把解決方案分享到腳本之家平臺(tái)供大家參考,需要的朋友可以參考下2020-03-03
Django框架安裝及項(xiàng)目創(chuàng)建過(guò)程解析
這篇文章主要介紹了Django框架安裝及項(xiàng)目創(chuàng)建過(guò)程解析,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下2020-09-09
Pycharm及python安裝詳細(xì)步驟及PyCharm配置整理(推薦)
這篇文章主要介紹了Pycharm及python安裝詳細(xì)步驟以及PyCharm配置整理,本文通過(guò)圖文并茂的形式給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2020-04-04
django多種支付、并發(fā)訂單處理實(shí)例代碼
在本篇文章里小編給大家整理的是關(guān)于django多種支付、并發(fā)訂單處理實(shí)例代碼,需要的朋友們可以學(xué)習(xí)下。2019-12-12

