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 提取文件的小程序
Jul 29 Python
在Python中编写数据库模块的教程
Apr 29 Python
Python写的一个简单监控系统
Jun 19 Python
python中int与str互转方法
Jul 02 Python
Python 获取div标签中的文字实例
Dec 20 Python
Django框架中间件(Middleware)用法实例分析
May 24 Python
python 实现多线程下载视频的代码
Nov 15 Python
Python3内置函数chr和ord实现进制转换
Jun 05 Python
Python读取二进制文件代码方法解析
Jun 22 Python
Python APScheduler执行使用方法详解
Dec 10 Python
Python获取江苏疫情实时数据及爬虫分析
Aug 02 Python
python编程实现清理微信重复缓存文件
Nov 01 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
音乐朗读剧《MARS RED》2021年TV动画化决定!
2020/03/06 日漫
精致的人儿就要挑杯子喝咖啡
2021/03/03 冲泡冲煮
PHP脚本的10个技巧(8)
2006/10/09 PHP
php安装扩展mysqli的实现步骤及报错解决办法
2017/09/23 PHP
在phpstudy集成环境下的nginx服务器下配置url重写
2019/12/02 PHP
当某个文本框成为焦点时即清除文本框内容
2014/04/28 Javascript
wap浏览自动跳转到wap页面的js代码
2014/05/17 Javascript
jquery实现的鼠标下拉滚动置顶效果
2014/07/24 Javascript
script标签属性用type还是language
2015/01/21 Javascript
AngularJs expression详解及简单示例
2016/09/01 Javascript
如何提高数据访问速度
2016/12/26 Javascript
vue2.0多条件搜索组件使用详解
2020/03/26 Javascript
AngularJS2 与 D3.js集成实现自定义可视化的方法
2017/12/01 Javascript
解决npm管理员身份install时出现权限的问题
2018/03/16 Javascript
使用async await 封装 axios的方法
2018/07/09 Javascript
layui上传图片到服务器的非项目目录下的方法
2019/09/26 Javascript
详解关于Vue单元测试的几个坑
2020/04/26 Javascript
详解react组件通讯方式(多种)
2020/05/06 Javascript
ES6中的类(Class)示例详解
2020/12/09 Javascript
jquery实现拖拽小方块效果
2020/12/10 jQuery
[01:05:12]2014 DOTA2国际邀请赛中国区预选赛 TongFu VS CIS-GAME
2014/05/21 DOTA
Python自动登录126邮箱的方法
2015/07/10 Python
Python 专题三 字符串的基础知识
2017/03/19 Python
matplotlib subplots 设置总图的标题方法
2018/05/25 Python
python数据批量写入ScrolledText的优化方法
2018/10/11 Python
对python 命令的-u参数详解
2018/12/03 Python
python 获取图片分辨率的方法
2019/01/08 Python
Python3安装psycopy2以及遇到问题解决方法
2019/07/03 Python
python的等深分箱实例
2019/11/22 Python
Python使用socketServer包搭建简易服务器过程详解
2020/06/12 Python
利用CSS3的线性渐变linear-gradient制作边框的示例
2016/06/02 HTML / CSS
介绍一下sql server的安全性
2014/08/10 面试题
2015年图书馆个人工作总结
2015/05/26 职场文书
关于运动会的宣传稿
2015/07/23 职场文书
2016高考寄语集锦
2015/12/04 职场文书
SpringCloud之@FeignClient()注解的使用方式
2021/09/25 Java/Android