首頁  >  文章  >  後端開發  >  python中atexit模組的深入理解

python中atexit模組的深入理解

高洛峰
高洛峰原創
2017-03-08 09:21:011025瀏覽

atexit模組很簡單,只定義了一個register函數用於註冊程式退出時的回呼函數,我們可以在這個回呼函數中做一些資源清理的操作。以下這篇文章主要介紹了python中atexit模組的相關資料,需要的朋友可以參考下。

atexit 模組介紹

python atexit 模組定義了一個register 函數,用於在python 解釋器中註冊一個退出函數,這個函數在解釋器正常終止時自動執行,一般用來做一些資源清理的操作。 atexit 按註冊的相反順序執行這些函數; 例如註冊A、B、C,在解釋器終止時按順序C,B,A運行。

Note:如果程式是非正常crash,或透過os._exit()退出,註冊的退出函數將不會被呼叫。

官方文件:https://docs.python.org/3.5/library/atexit.html

註冊退出函數

atexit.register(func, *args, **kargs)

將func當作要在終止時執行的函數。任何要傳遞給func的可選參數必須作為參數傳遞給register() 。可以多次註冊相同的函數和參數。

當程式退出的時候,依照先進後出的順序呼叫註冊的函數。如果退出函數在執行過程中拋出了異常,atexit會列印異常的訊息,並繼續執行下一下回調,直到所有退出函數執行完畢,它會重新拋出最後接收到的例外。

範例

透過裝飾器的方式:

#!/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()

刪除退出函數[一般用不到]

> atexit.unregister(func)
>

從解釋器關閉時執行的函數清單中刪除func。 在呼叫unregister()後,當解釋器關閉時,即使它被註冊了多次,func也不會被呼叫。如果func沒有註冊過的話,則unregister()什麼也不會做。

更多python中atexit模組的深入理解相關文章請關注PHP中文網!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn