python装饰器实现对异常代码出现进行自动监控的实现方法


Posted in Python onSeptember 15, 2020

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

那么我们怎么来实现呢,我想到了装饰器,当程序执行到异常后,我记录时间,写入文件,然后读取最近的第五次的判断,两者时间戳的只差小于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)

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

python装饰器实现对异常代码出现进行自动监控的实现方法

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

@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

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

python装饰器实现对异常代码出现进行自动监控的实现方法

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

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

总结

到此这篇关于python装饰器实现对异常代码出现进行自动监控的实现方法的文章就介绍到这了,更多相关python装饰器自动监控内容请搜索三水点靠木以前的文章或继续浏览下面的相关文章希望大家以后多多支持三水点靠木!

Python 相关文章推荐
Python实现从url中提取域名的几种方法
Sep 26 Python
Python实现TCP/IP协议下的端口转发及重定向示例
Jun 14 Python
Python的语言类型(详解)
Jun 24 Python
Python实现读取Properties配置文件的方法
Mar 29 Python
python实现字符串中字符分类及个数统计
Sep 28 Python
Python简单过滤字母和数字的方法小结
Jan 09 Python
python七夕浪漫表白源码
Apr 05 Python
使用python list 查找所有匹配元素的位置实例
Jun 11 Python
python程序变成软件的实操方法
Jun 24 Python
python tkinter图形界面代码统计工具
Sep 18 Python
Python参数传递实现过程及原理详解
May 14 Python
Python+DeOldify实现老照片上色功能
Jun 21 Python
Python requests上传文件实现步骤
Sep 15 #Python
python -v 报错问题的解决方法
Sep 15 #Python
基于Python正确读取资源文件
Sep 14 #Python
Django框架安装及项目创建过程解析
Sep 14 #Python
通过代码实例了解Python sys模块
Sep 14 #Python
基于python实现简单C/S模式代码实例
Sep 14 #Python
Elasticsearch py客户端库安装及使用方法解析
Sep 14 #Python
You might like
PHP无刷新上传文件实现代码
2011/09/19 PHP
PHP中isset()和unset()函数的用法小结
2014/03/11 PHP
php中遍历二维数组并以表格的形式输出的方法
2017/01/03 PHP
理解Javascript_02_理解undefined和null
2010/10/11 Javascript
事件绑定之小测试  onclick &amp;&amp; addEventListener
2011/07/31 Javascript
javascript 判断中文字符长度的函数代码
2012/08/27 Javascript
浅谈关于JavaScript的语言特性分析
2013/04/11 Javascript
随窗体滑动的小插件sticky源码
2013/06/21 Javascript
浅析JavaScript事件和方法
2015/02/28 Javascript
JQ选择器_选择同类元素的第N个子元素的实现方法
2016/09/08 Javascript
利用Js的console对象,在控制台打印调式信息测试Js的实现
2016/11/26 Javascript
jQuery中get方法用法分析
2016/12/07 Javascript
React创建组件的三种方式及其区别
2017/01/12 Javascript
详解JavaScript对象的深浅复制
2017/03/30 Javascript
如何在Vue中使用CleaveJS格式化你的输入内容
2018/12/14 Javascript
ES6 Object.assign()的用法及其使用
2020/01/18 Javascript
简单介绍Python中的readline()方法的使用
2015/05/24 Python
Python优化技巧之利用ctypes提高执行速度
2016/09/11 Python
Python实现的圆形绘制(画圆)示例
2018/01/31 Python
python如何修改装饰器中参数
2018/03/20 Python
浅谈python之高阶函数和匿名函数
2019/03/21 Python
在Python中构建增广矩阵的实现方法
2019/07/01 Python
pytorch进行上采样的种类实例
2020/02/18 Python
python中68个内置函数的总结与介绍
2020/02/24 Python
解决python3中os.popen()出错的问题
2020/11/19 Python
分享全球十款超强HTML5开发工具
2014/05/14 HTML / CSS
浅谈html5增强的页面元素
2016/06/14 HTML / CSS
演讲稿怎么写才完美
2014/01/02 职场文书
电子邮箱格式怎么写
2014/01/12 职场文书
校园安全广播稿
2014/02/08 职场文书
公司大门门卫岗位职责
2014/06/11 职场文书
祖国在我心中演讲稿(小学生)
2014/09/23 职场文书
党员个人整改措施
2014/10/24 职场文书
法定代表人身份证明书
2015/06/18 职场文书
外出听课学习心得体会
2016/01/15 职场文书
解决thinkphp6(tp6)在状态码500下不报错,或者显示错误“Malformed UTF-8 characters”的问题
2021/04/01 PHP