python atexit 模塊定義了一個 register 函數,用於在 python 解釋器中注冊一個退出函數,這個函數在解釋器正常終止時自動執行,一般用來做一些資源清理的操作。 atexit 按注冊的相反順序執行這些函數; 例如注冊A、B、C,在解釋器終止時按順序C,B,A運行。
Note:如果程序是非正常crash,或者通過os._exit()退出,注冊的退出函數將不會被調用。
通過裝飾器的方式:
#!/usr/bin/env python # -*- coding:utf-8 -*- # @Time : 2019/07/22 23:57 # @Author : wang huixi # @File : update.py import os from atexit import register def main(): print('Do something.') @register def _atexit(): print('Done.') if __name__ == '__main__': main()
非裝飾器的方式:
#!/usr/bin/env python # -*- coding:utf-8 -*- # @Time : 2019/07/22 23:57 # @Author : wang huixi # @File : update.py import os from atexit import register def main(): print('main') 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__': register(goodbye, adjective='nice', name='Donny') main() exit(1) #程序退出了 print "chegn xu"
刪除退出函數(一般用不到)
atexit.unregister(func)
從解釋器關閉時運行的函數列表中刪除func。 調用unregister()后,當解釋器關閉時,即使它被注冊了多次,func也不會被調用。如果func沒有注冊過的話,則unregister()什么也不會做。