python之atexit模塊的使用


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()什么也不會做。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM