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中的25个隐藏特性
Mar 30 Python
Python cookbook(数据结构与算法)保存最后N个元素的方法
Feb 13 Python
tensorflow 中对数组元素的操作方法
Jul 27 Python
解决Python中list里的中文输出到html模板里的问题
Dec 17 Python
Python数据类型之列表和元组的方法实例详解
Jul 08 Python
Python脚本利用adb进行手机控制的方法
Jul 08 Python
用sqlalchemy构建Django连接池的实例
Aug 29 Python
Python实现二叉树的最小深度的两种方法
Sep 30 Python
python GUI库图形界面开发之PyQt5计数器控件QSpinBox详细使用方法与实例
Feb 28 Python
python如何爬取网页中的文字
Jul 28 Python
Python+OpenCV图像处理—— 色彩空间转换
Oct 22 Python
python中time包实例详解
Feb 02 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
用phpmyadmin更改mysql5.0登录密码
2008/03/25 PHP
php include,include_once,require,require_once
2008/09/05 PHP
PHP下获取上个月、下个月、本月的日期(strtotime,date)
2014/02/02 PHP
php常用的安全过滤函数集锦
2014/10/09 PHP
php用户注册时常用的检验函数实例总结
2014/12/22 PHP
Yii+MYSQL锁表防止并发情况下重复数据的方法
2016/07/14 PHP
PHP实现简易用户登录系统
2020/07/10 PHP
jQuery 点击图片跳转上一张或下一张功能的实现代码
2010/03/12 Javascript
JavaScript继承方式实例
2010/10/29 Javascript
精通Javascript系列之数值计算
2011/06/07 Javascript
js单例模式的两种方案
2013/10/22 Javascript
学习JavaScript编程语言的8张思维导图分享
2015/03/27 Javascript
NodeJS远程代码执行
2016/08/28 NodeJs
js仿小米手机上下滑动效果
2017/02/05 Javascript
JS使用cookie实现只出现一次的广告代码效果
2017/04/22 Javascript
JS运动改变单物体透明度的方法分析
2018/01/23 Javascript
在Vue 中实现循环渲染多个相同echarts图表
2020/07/20 Javascript
Vue组件跨层级获取组件操作
2020/07/27 Javascript
浅谈vue生命周期共有几个阶段?分别是什么?
2020/08/07 Javascript
Tornado服务器中绑定域名、虚拟主机的方法
2014/08/22 Python
Python 创建子进程模块subprocess详解
2015/04/08 Python
Python中flatten( )函数及函数用法详解
2018/11/02 Python
解决pycharm不能自动补全第三方库的函数和属性问题
2020/03/12 Python
Python Map 函数的使用
2020/08/28 Python
css3中检验表单的required,focus,valid和invalid样式
2014/02/21 HTML / CSS
CSS3实现div从下往上滑入滑出效果示例
2020/04/28 HTML / CSS
交通专业个人自荐信格式
2013/09/23 职场文书
药品质量检测应届生求职信
2013/11/14 职场文书
工商企业管理实习自我鉴定
2013/12/04 职场文书
机电一体化自荐信
2013/12/10 职场文书
团工委书记自荐书范文
2013/12/17 职场文书
消防安全责任书
2014/04/14 职场文书
大学生活动总结怎么写
2014/04/29 职场文书
大型演出策划方案
2014/05/28 职场文书
同学会邀请函模板
2015/01/30 职场文书
新课程改革心得体会
2016/01/22 职场文书