欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

Python中atexit模塊的基本使用示例

 更新時間:2015年07月08日 11:41:08   作者:DarkBull  
這篇文章主要介紹了Python中atexit模塊的基本使用示例,示例代碼基于Python2.x版本,注意其和Python3的兼容性,需要的朋友可以參考下

atexit模塊很簡單,只定義了一個register函數(shù)用于注冊程序退出時的回調(diào)函數(shù),我們可以在這個回調(diào)函數(shù)中做一些資源清理的操作。

注:如果程序是非正常crash,或者通過os._exit()退出,注冊的回調(diào)函數(shù)將不會被調(diào)用。

我們也可以通過sys.exitfunc來注冊回調(diào),但通過它只能注冊一個回調(diào),而且還不支持參數(shù)。所以建議大家使用atexit來注冊回調(diào)函數(shù)。但千萬不要在程序中同時使用這兩種方式,否則通過atexit注冊的回調(diào)可能不會被正常調(diào)用。其實(shí)通過查閱atexit的源碼,你會發(fā)現(xiàn)原來它內(nèi)部是通過sys.exitfunc來實(shí)現(xiàn)的,它先把注冊的回調(diào)函數(shù)放到一個列表中,當(dāng)程序退出的時候,按先進(jìn)后出的順序調(diào)用注冊的回調(diào)。如果回調(diào)函數(shù)在執(zhí)行過程中拋出了異常,atexit會打印異常的文字信息,并繼續(xù)執(zhí)行下一下回調(diào),直到所有的回調(diào)都執(zhí)行完畢,它會重新拋出最后接收到的異常。

如果使用的python版本是2.6,還可以用裝飾器的語法來注冊回調(diào)函數(shù)。

下面是一個例子,展示了atexit模塊的使用:
 

import atexit
 
def exit0(*args, **kwarg):
  print 'exit0'
  for arg in args:
    print ' ' * 4, arg
 
  for item in kwarg.items():
    print ' ' * 4, item
 
def exit1():
  print 'exit1'
  raise Exception, 'exit1'
 
def exit2():
  print 'exit2'  
 
atexit.register(exit0, *[1, 2, 3], **{ "a": 1, "b": 2, })
atexit.register(exit1)
atexit.register(exit2)
 
@atexit.register
def exit3():
  print 'exit3'
 
if __name__ == '__main__':
  pass

下面是程序運(yùn)行的結(jié)果,可以看到回調(diào)函數(shù)執(zhí)行的順序與它們被注冊的順序剛才相反。

201578113956933.jpg (513×365)

相關(guān)文章

最新評論