python装饰器实现对异常代码出现进行监控

枫铃3年前 (2021-07-23)Python245

异常,不应该存在,但是我们有时候会遇到这样的情况,比如我们监控服务器的时候,每一秒去采集一次信息,那么有一秒没有采集到我们想要的信息,但是下一秒采集到了, 而后每次的采集都能采集到,就那么一次采集不到,我们应该针对这一次采集不到进行分析吗,这种的情况可以说无法重复出现,我们也无法避免,因为外界的因素太多太多,我们无法去控制这些外面的因素,所以我们会有这样的需求,一段时间内出现频率多少次,我们才能显示一次报警,或者说,一段时间内出现的频率达到我们的异常许可范围我们认为这样的属于异常,我们可以发出报警。

那么我们怎么来实现呢,我想到了装饰器,当程序执行到异常后,我记录时间,写入文件,然后读取最近的第五次的判断,两者时间戳的只差小于60s,我认为这样的可以发送警报,如果大于60s,则认为不足以发出我们的警告,

那么我们来看看我们的代码应该怎么写。

'''
遇到问题没人解答?小编创建了一个Python学习交流QQ群:778463939
寻找有志同道合的小伙伴,互帮互助,群里还有不错的视频学习教程和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('越界代表着我们的实验是成功的')
    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)

这样我们针对一个程序的异常监控就实现了,我们来运行下这个异常监控的代码。,
在这里插入图片描述
我们可以看到我们的代码可以正常运行,那么我们来试试,我们对多个程序的代码进行监控,我们的脚本可不可以实现呢。

'''
遇到问题没人解答?小编创建了一个Python学习交流QQ群:778463939
寻找有志同道合的小伙伴,互帮互助,群里还有不错的视频学习教程和PDF电子书!
'''
@make
def shanghai(i,m):
    print(i/m)
@make
def rizhao(i,m):
    print(i/m)
@make
def zhengzhou(i,m):
    print(i/m)

我们增加这么几个方法,并且我们去运行他们,
在这里插入图片描述
我们可以看到,只要有异常,我们的程序都会记录,当然了,这样的还不能正常利用到我们的工作中,

稍后,可以将这里的异常监控的部分的实践,和我之前写的异常监控脚本想结合下。

相关文章

python 回调函数(Callback)

什么是回调函数ÿ...

Python函数中参数前带*是什么意思?

背景 前几天看了些py...

python五种调试或排错的方法

python五种调试或排错的方法

1、print,直接打印,比较简单而且粗暴 在代码中直接输入print+需要输出的结果,根据打印的内容判断即...

Python基础教程:嵌套函数、闭包

嵌套函数 在函数中定义...

python爬虫Scrapy框架之增量式爬虫

一 增量式爬虫 什么时候使用增量式爬虫: 增量式爬虫:需求 当我们浏览一些网站会发现,某些网站定时的会在原有的基...

发表评论

访客

看不清,换一张

◎欢迎参与讨论,请在这里发表您的看法和观点。