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的Flask框架中实现登录用户的个人资料和头像的教程
Apr 20 Python
新手如何快速入门Python(菜鸟必看篇)
Jun 10 Python
Python实现求数列和的方法示例
Jan 12 Python
django2用iframe标签完成网页内嵌播放b站视频功能
Jun 20 Python
18个Python脚本可加速你的编码速度(提示和技巧)
Oct 17 Python
pytorch实现用CNN和LSTM对文本进行分类方式
Jan 08 Python
详解python方法之绑定方法与非绑定方法
Aug 17 Python
Opencv python 图片生成视频的方法示例
Nov 18 Python
Python中常见的导入方式总结
May 06 Python
python b站视频下载的五种版本
May 27 Python
Python matplotlib可视化之绘制韦恩图
Feb 24 Python
Python基本的内置数据类型及使用方法
Apr 13 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
数据库的日期格式转换
2006/10/09 PHP
php中++i 与 i++ 的区别
2012/08/08 PHP
php防止伪造数据从地址栏URL提交的方法
2014/08/24 PHP
php解析base64数据生成图片的方法
2016/12/06 PHP
基于jquery的cookie的用法
2011/01/10 Javascript
javascript动画浅析
2012/08/30 Javascript
利用js实现前台动态添加文本框,后台获取文本框内容(示例代码)
2013/11/25 Javascript
jQuery实现的原图对比窗帘效果
2014/06/15 Javascript
javascript中mouseover、mouseout使用详解
2015/07/19 Javascript
js仿微博实现统计字符和本地存储功能
2015/12/22 Javascript
微信小程序 自己制作小组件实例详解
2016/12/22 Javascript
微信扫码支付零云插件版实例详解
2017/04/26 Javascript
JavaScript实现图片拖曳效果
2017/09/08 Javascript
详解ES6中的代理模式——Proxy
2018/01/08 Javascript
详解Webpack+Babel+React开发环境的搭建的方法步骤
2018/01/09 Javascript
vue打包的时候自动将px转成rem的操作方法
2018/06/20 Javascript
解决vue-cli webpack打包后加载资源的路径问题
2018/09/25 Javascript
使用pkg打包ThinkJS项目的方法步骤
2019/12/30 Javascript
js实现移动端图片滑块验证功能
2020/09/29 Javascript
vue+iview实现文件上传
2020/11/17 Vue.js
[48:52]DOTA2上海特级锦标赛A组小组赛#2 Secret VS CDEC第一局
2016/02/25 DOTA
在Python 字典中一键对应多个值的实例
2019/02/03 Python
keras 特征图可视化实例(中间层)
2020/01/24 Python
打包PyQt5应用时的注意事项
2020/02/14 Python
python pyecharts 实现一个文件绘制多张图
2020/05/13 Python
Mysql数据库反向生成Django里面的models指令方式
2020/05/18 Python
Python自定义sorted排序实现方法详解
2020/09/18 Python
python自动化测试三部曲之request+django实现接口测试
2020/10/07 Python
CSS实现鼠标滑过鼠标点击代码写法
2016/12/26 HTML / CSS
浅析两列自适应布局的3种思路
2016/05/03 HTML / CSS
美国在线珠宝商店:SZUL
2017/02/11 全球购物
护士毕业实习感言
2014/03/05 职场文书
大学生就业意向书范文
2014/04/01 职场文书
诚信的演讲稿范文
2014/05/12 职场文书
未婚证明书模板
2014/10/08 职场文书
工程款申请报告
2015/05/15 职场文书