深入理解python中的atexit模塊
atexit 模塊介紹
python atexit 模塊定義了一個(gè) register 函數(shù),用于在 python 解釋器中注冊(cè)一個(gè)退出函數(shù),這個(gè)函數(shù)在解釋器正常終止時(shí)自動(dòng)執(zhí)行,一般用來(lái)做一些資源清理的操作。 atexit 按注冊(cè)的相反順序執(zhí)行這些函數(shù); 例如注冊(cè)A、B、C,在解釋器終止時(shí)按順序C,B,A運(yùn)行。
Note:如果程序是非正常crash,或者通過(guò)os._exit()退出,注冊(cè)的退出函數(shù)將不會(huì)被調(diào)用。
官方文檔:https://docs.python.org/3.5/library/atexit.html
注冊(cè) 退出函數(shù)
atexit.register(func, *args, **kargs)
將func作為要在終止時(shí)執(zhí)行的函數(shù)。任何要傳遞給func的可選參數(shù)必須作為參數(shù)傳遞給register() ??梢远啻巫?cè)相同的函數(shù)和參數(shù)。
當(dāng)程序退出的時(shí)候,按先進(jìn)后出的順序調(diào)用注冊(cè)的函數(shù)。如果退出函數(shù)在執(zhí)行過(guò)程中拋出了異常,atexit會(huì)打印異常的信息,并繼續(xù)執(zhí)行下一下回調(diào),直到所有退出函數(shù)執(zhí)行完畢,它會(huì)重新拋出最后接收到的異常。
示例
通過(guò)裝飾器的方式:
#!/usr/bin/env python
from atexit import register
def main():
print('Do something.')
@register
def _atexit():
print('Done.')
if __name__ == '__main__':
main()
非裝飾器的方式:
#!/usr/bin/env python
from atexit import register
def main():
#pass
print('XX')
def goodbye(name, adjective):
print('Goodbye, %s, it was %s to meet you.' % (name, adjective))
register(goodbye, 'Donny', 'nice')
# or:
# register(goodbye, adjective='nice', name='Donny')
if __name__ == '__main__':
main()
刪除退出函數(shù)[一般用不到]
> atexit.unregister(func) >
從解釋器關(guān)閉時(shí)運(yùn)行的函數(shù)列表中刪除func。 調(diào)用unregister()后,當(dāng)解釋器關(guān)閉時(shí),即使它被注冊(cè)了多次,func也不會(huì)被調(diào)用。如果func沒(méi)有注冊(cè)過(guò)的話,則unregister()什么也不會(huì)做。
總結(jié)
以上就是這篇文章的全部?jī)?nèi)容了,希望本文的內(nèi)容對(duì)大家的學(xué)習(xí)或者工作能帶來(lái)一定的幫助,如果有疑問(wèn)大家可以留言交流,謝謝大家對(duì)腳本之家的支持。
相關(guān)文章
Python驅(qū)動(dòng)ansys執(zhí)行apdl文件的代碼示例
在Python中驅(qū)動(dòng)ANSYS執(zhí)行APDL(ANSYS Parametric Design Language)文件,可以通過(guò)使用subprocess模塊來(lái)調(diào)用ANSYS的可執(zhí)行文件,并傳遞APDL文件作為參數(shù),本文給大家介紹了一個(gè)詳細(xì)的代碼示例,需要的朋友可以參考下2024-11-11
python使用fcntl模塊實(shí)現(xiàn)程序加鎖功能示例
這篇文章主要介紹了python使用fcntl模塊實(shí)現(xiàn)程序加鎖功能,較為詳細(xì)的分析了fcntl模塊的具體功能并結(jié)合實(shí)例形式給出了Python實(shí)現(xiàn)程序加鎖的操作技巧,需要的朋友可以參考下2017-06-06
Python如何使用神經(jīng)網(wǎng)絡(luò)進(jìn)行簡(jiǎn)單文本分類
這篇文章主要介紹了Python如何使用神經(jīng)網(wǎng)絡(luò)進(jìn)行簡(jiǎn)單文本分類,幫助大家更好的理解和學(xué)習(xí)使用python,感興趣的朋友可以了解下2021-02-02
python進(jìn)程間數(shù)據(jù)交互的幾種實(shí)現(xiàn)方式
本文主要介紹了python進(jìn)程數(shù)據(jù)交互的幾種實(shí)現(xiàn)方式,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2023-05-05
Python代碼一鍵轉(zhuǎn)Jar包及Java調(diào)用Python新姿勢(shì)
這篇文章主要介紹了Python一鍵轉(zhuǎn)Jar包,Java調(diào)用Python新姿勢(shì),本文通過(guò)截圖實(shí)例給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2020-03-03
對(duì)python xlrd讀取datetime類型數(shù)據(jù)的方法詳解
今天小編就為大家分享一篇對(duì)python xlrd讀取datetime類型數(shù)據(jù)的方法詳解,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧2018-12-12
Pandas中八個(gè)常用option設(shè)置的示例詳解
通過(guò)pandas的使用,我們經(jīng)常要交互式地展示表格(dataframe)、分析表格。本文整理了8個(gè)常用的配置選項(xiàng),使用可以提高很多效率,需要的可以參考一下2022-06-06

