1. 程式人生 > 實用技巧 >python裝飾器實現對異常程式碼出現進行自動監控

python裝飾器實現對異常程式碼出現進行自動監控

異常,不應該存在,但是我們有時候會遇到這樣的情況,比如我們監控伺服器的時候,每一秒去採集一次資訊,那麼有一秒沒有采集到我們想要的資訊,但是下一秒採集到了, 而後每次的採集都能採集到,就那麼一次採集不到,我們應該針對這一次採集不到進行分析嗎,這種的情況可以說無法重複出現,我們也無法避免,因為外界的因素太多太多,我們無法去控制這些外面的因素,所以我們會有這樣的需求,一段時間內出現頻率多少次,我們才能顯示一次報警,或者說,一段時間內出現的頻率達到我們的異常許可範圍我們認為這樣的屬於異常,我們可以發出報警。

那麼我們怎麼來實現呢,我想到了裝飾器,當程式執行到異常後,我記錄時間,寫入檔案,然後讀取最近的第五次的判斷,兩者時間戳的只差小於60s,我認為這樣的可以傳送警報,如果大於60s,則認為不足以發出我們的警告,

那麼我們來看看我們的程式碼應該怎麼寫。


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('越界代表著我們的實驗是成功的')
    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)

這樣我們針對一個程式的異常監控就實現了,我們來執行下這個異常監控的程式碼。,

我們可以看到我們的程式碼可以正常執行,那麼我們來試試,我們對多個程式的程式碼進行監控,我們的指令碼可不可以實現呢。


@make
def shanghai(i,m):
    print(i/m)
@make
def rizhao(i,m):
    print(i/m)
@make
def zhengzhou(i,m):
    print(i/m)

PS:遇到問題沒人解答?需要Python學習資料?可以加點選下方連結自行獲取
note.youdao.com/noteshare?id=2dce86d0c2588ae7c0a88bee34324d76

我們增加這麼幾個方法,並且我們去執行他們,

我們可以看到,只要有異常,我們的程式都會記錄,當然了,這樣的還不能正常利用到我們的工作中,

稍後,可以將這裡的異常監控的部分的實踐,和我之前寫的異常監控指令碼想結合下。