国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁(yè) > 編程 > Python > 正文

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

2019-11-25 17:13:12
字體:
來(lái)源:轉(zhuǎn)載
供稿:網(wǎng)友

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

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

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

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

下面是一個(gè)例子,展示了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.registerdef exit3():  print 'exit3' if __name__ == '__main__':  pass

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

201578113956933.jpg (513×365)

發(fā)表評(píng)論 共有條評(píng)論
用戶(hù)名: 密碼:
驗(yàn)證碼: 匿名發(fā)表
主站蜘蛛池模板: 麻阳| 虎林市| 深泽县| 盐边县| 青田县| 武川县| 涪陵区| 囊谦县| 海兴县| 六安市| 卢氏县| 巫山县| 连云港市| 赞皇县| 青河县| 盐山县| 巴楚县| 罗平县| 玉山县| 东港市| 阜新| 本溪| 宁国市| 呼图壁县| 甘泉县| 新建县| 巩义市| 偃师市| 闸北区| 齐齐哈尔市| 米易县| 浏阳市| 东乡| 香格里拉县| 察哈| 林周县| 班玛县| 于都县| 五华县| 文山县| 湄潭县|