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中文網!