博客
关于我
python装饰器实现对异常代码出现进行监控
阅读量:427 次
发布时间:2019-03-06

本文共 1705 字,大约阅读时间需要 5 分钟。

 

 

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

       

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

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

    

import datetime,time,randomdef 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@makedef 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)

 

 

这样我们针对一个程序的异常监控就实现了,我们来运行下这个异常监控的代码。,

 

我们可以看到我们的代码可以正常运行,那么我们来试试,我们对多个程序的代码进行监控,我们的脚本可不可以实现呢。

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

 

我们增加这么几个方法,并且我们去运行他们,

 我们可以看到,只要有异常,我们的程序都会记录,当然了,这样的还不能正常利用到我们的工作中,

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

 

转载地址:http://wnjyz.baihongyu.com/

你可能感兴趣的文章
【设计模式】策略模式
查看>>
【设计模式】命令模式
查看>>
Jenkins 集成postman 自动化运行接口测试用例
查看>>
hashlib 简单加密
查看>>
python装饰器实现对异常代码出现进行监控
查看>>
轮评审用例,写用例的重要性-----(python单元测试反思)
查看>>
django+appium实现UI自动化测试平台(开源部分,可定制开发)
查看>>
PAT 1008. Elevator (20)
查看>>
蓝桥杯 密码脱落 LCS
查看>>
第七届C/C++B-方格填数 DFS
查看>>
数据结构课设--3哈夫曼编码译码系统(树应用)
查看>>
pku 1061 青蛙的约会 扩展欧几里得
查看>>
Spring Boot 2.4 配置文件将加载机制大变化
查看>>
WPF之全局快捷键
查看>>
javascript 用函数语句和表达式定义函数的区别
查看>>
基于react hooks,antd4 配置生成表单并自动排列
查看>>
也来玩玩 javascript对象深拷贝,浅拷贝
查看>>
【转载】Kubernetes CNI网络最强对比:Flannel、Calico、Canal和Weave
查看>>
Kubernetes实战总结 - 动态存储管理StorageClass
查看>>
Django实战总结 - 快速开发一个Web服务
查看>>