python装饰器实现对异常代码出现进行监控
異常,不應(yīng)該存在,但是我們有時候會遇到這樣的情況,比如我們監(jiān)控服務(wù)器的時候,每一秒去采集一次信息,那么有一秒沒有采集到我們想要的信息,但是下一秒采集到了, 而后每次的采集都能采集到,就那么一次采集不到,我們應(yīng)該針對這一次采集不到進(jìn)行分析嗎,這種的情況可以說無法重復(fù)出現(xiàn),我們也無法避免,因?yàn)橥饨绲囊蛩靥嗵?#xff0c;我們無法去控制這些外面的因素,所以我們會有這樣的需求,一段時間內(nèi)出現(xiàn)頻率多少次,我們才能顯示一次報(bào)警,或者說,一段時間內(nèi)出現(xiàn)的頻率達(dá)到我們的異常許可范圍我們認(rèn)為這樣的屬于異常,我們可以發(fā)出報(bào)警。
那么我們怎么來實(shí)現(xiàn)呢,我想到了裝飾器,當(dāng)程序執(zhí)行到異常后,我記錄時間,寫入文件,然后讀取最近的第五次的判斷,兩者時間戳的只差小于60s,我認(rèn)為這樣的可以發(fā)送警報(bào),如果大于60s,則認(rèn)為不足以發(fā)出我們的警告,
那么我們來看看我們的代碼應(yīng)該怎么寫。
''' 遇到問題沒人解答?小編創(chuàng)建了一個Python學(xué)習(xí)交流QQ群:778463939 尋找有志同道合的小伙伴,互幫互助,群里還有不錯的視頻學(xué)習(xí)教程和PDF電子書! ''' import datetime,time,random def make(func):def mak(*args,**kwargs):try:func(*args,**kwargs)except:with open('except.txt','a+') as f:except_time=datetime.datetime.now()f.writelines(except_time.strftime('%Y-%m-%d %H:%M:%S')+'\n')f.close()with open('except.txt','rb') as m:try:date=m.readlines()[-5].decode('utf-8')ne=(date.split('\r\n')[0])f1=datetime.datetime.strptime(ne,'%Y-%m-%d %H:%M:%S')if (except_time-f1).seconds<6:print('異常!!!fail')else:print('正常!')m.close()except:print('越界代表著我們的實(shí)驗(yàn)是成功的')return mak @make def beijing(i,m):print(i/m) if __name__=="__main__":while True:f=random.choice([0,1,2,3])n=random.choice([0,1,2,3])beijing(f,n)time.sleep(0.3)這樣我們針對一個程序的異常監(jiān)控就實(shí)現(xiàn)了,我們來運(yùn)行下這個異常監(jiān)控的代碼。,
我們可以看到我們的代碼可以正常運(yùn)行,那么我們來試試,我們對多個程序的代碼進(jìn)行監(jiān)控,我們的腳本可不可以實(shí)現(xiàn)呢。
我們增加這么幾個方法,并且我們?nèi)ミ\(yùn)行他們,
我們可以看到,只要有異常,我們的程序都會記錄,當(dāng)然了,這樣的還不能正常利用到我們的工作中,
稍后,可以將這里的異常監(jiān)控的部分的實(shí)踐,和我之前寫的異常監(jiān)控腳本想結(jié)合下。
總結(jié)
以上是生活随笔為你收集整理的python装饰器实现对异常代码出现进行监控的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: python 实现redis订阅发布功能
- 下一篇: python服务端多进程压测工具