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编程中运用闭包时所需要注意的一些地方
May 02 Python
Python科学画图代码分享
Nov 29 Python
TensorFlow实现创建分类器
Feb 06 Python
如何安装多版本python python2和python3共存以及pip共存
Sep 18 Python
Python微信操控itchat的方法
May 31 Python
python通过实例讲解反射机制
Oct 17 Python
pytorch实现mnist分类的示例讲解
Jan 10 Python
tensorflow使用指定gpu的方法
Feb 04 Python
python argparse传入布尔参数false不生效的解决
Apr 20 Python
Python xlrd/xlwt 创建excel文件及常用操作
Sep 24 Python
安装Anaconda3及使用Jupyter的方法
Oct 27 Python
python获取对象信息的实例详解
Jul 07 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中的session永不过期的解决思路及实现方法分享
2011/04/20 PHP
php延迟静态绑定实例分析
2015/02/08 PHP
PHP使用pear自带的mail类库发邮件的方法
2015/07/08 PHP
详解PHP的Laravel框架中Eloquent对象关系映射使用
2016/02/26 PHP
理清PHP在Linxu下执行时的文件权限方法
2017/06/07 PHP
PHP设计模式之组合模式定义与应用示例
2020/02/01 PHP
Firebug入门指南(Firefox浏览器)
2010/08/21 Javascript
JavaScript面向对象的实现方法小结
2015/04/14 Javascript
JS简单实现城市二级联动选择插件的方法
2015/08/19 Javascript
在 Express 中使用模板引擎
2015/12/10 Javascript
基于JavaScript短信验证码如何实现
2016/01/24 Javascript
使用jQuery调用XML实现无刷新即时聊天
2016/08/07 Javascript
JavaScript中捕获/阻止捕获、冒泡/阻止冒泡方法
2016/12/07 Javascript
Linux使用Node.js建立访问静态网页的服务实例详解
2017/03/21 Javascript
微信小程序开发入门基础教程
2017/04/19 Javascript
jQuery异步提交表单实例
2017/05/30 jQuery
详解jQuery中的easyui
2018/09/02 jQuery
基于layui轮播图满屏是高度自适应的解决方法
2019/09/16 Javascript
[01:08:33]OG vs VGJ.T 2018国际邀请赛小组赛BO2 第一场 8.18
2018/08/19 DOTA
Python实现获取网站PR及百度权重
2015/01/21 Python
Python对列表中的各项进行关联详解
2017/08/15 Python
python opencv设置摄像头分辨率以及各个参数的方法
2018/04/02 Python
Python3安装模块报错Microsoft Visual C++ 14.0 is required的解决方法
2020/07/28 Python
TripAdvisor越南:全球领先的旅游网站
2017/09/21 全球购物
美国滑雪板和装备购物网站:Skis.com
2018/12/20 全球购物
数字漫画:comiXology
2020/06/13 全球购物
swtich是否能作用在byte上,是否能作用在long上,是否能作用在String上?
2013/03/30 面试题
请问软件开发中的设计模式你会使用哪些
2015/05/13 面试题
十一酒店活动方案
2014/02/20 职场文书
《大禹治水》教学反思
2014/04/27 职场文书
银行招聘自荐信
2015/03/06 职场文书
销售经理岗位职责范本
2015/04/02 职场文书
2016小学新学期寄语
2015/12/04 职场文书
python 模拟在天空中放风筝的示例代码
2021/04/21 Python
MySQL query_cache_type 参数与使用详解
2021/07/01 MySQL
mysql5.5中文乱码问题解决的有用方法
2022/05/30 MySQL