atexit 模塊介紹html
python atexit 模塊定義了一個 register 函數,用於在 python 解釋器中註冊一個退出函數,這個函數在解釋器正常終止時自動執行,通常用來作一些資源清理的操做。 atexit 按註冊的相反順序執行這些函數; 例如註冊A、B、C,在解釋器終止時按順序C,B,A運行。python
Note:若是程序是非正常crash,或者經過os._exit()
退出,註冊的退出函數將不會被調用。函數
官方文檔:https://docs.python.org/3.5/library/atexit.htmlspa
註冊 退出函數 .net
atexit.register(func, *args, **kargs)
將func做爲要在終止時執行的函數。任何要傳遞給func的可選參數必須做爲參數傳遞給register()
。能夠屢次註冊相同的函數和參數。code
當程序退出的時候,按先進後出的順序調用註冊的函數。若是退出函數在執行過程當中拋出了異常,atexit會打印異常的信息,並繼續執行下一下回調,直到全部退出函數執行完畢,它會從新拋出最後接收到的異常。htm
示例blog
------經過裝飾器方式資源
#!/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()
什麼也不會作。
參考腳本之家:https://www.jb51.net/article/107630.htm