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上基于Markov链生成伪随机文本的教程
Apr 17 Python
Python使用QQ邮箱发送Email的方法实例
Feb 09 Python
python连接数据库的方法
Oct 19 Python
python中numpy.zeros(np.zeros)的使用方法
Nov 07 Python
Python装饰器原理与简单用法实例分析
Apr 29 Python
Python实现的读取/更改/写入xml文件操作示例
Aug 30 Python
python实现简易学生信息管理系统
Apr 05 Python
使用sklearn的cross_val_score进行交叉验证实例
Feb 28 Python
Python猜数字算法题详解
Mar 01 Python
python3获取控制台输入的数据的具体实例
Aug 16 Python
如何在scrapy中捕获并处理各种异常
Sep 28 Python
如何使用Django Admin管理后台导入CSV
Nov 06 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转换文件夹下所有文件编码的实现代码
2013/06/06 PHP
解析在PHP中使用全局变量的几种方法
2013/06/24 PHP
zf框架的registry(注册表)使用示例
2014/03/13 PHP
jQuery ajax+PHP实现的级联下拉列表框功能示例
2019/02/12 PHP
浅谈php使用curl模拟多线程发送请求
2019/03/08 PHP
去掉gridPanel表头全选框的小例子
2013/07/18 Javascript
JQuery拖动表头边框线调整表格列宽效果代码
2014/09/10 Javascript
JS使用eval解析JSON的注意事项分析
2015/11/14 Javascript
JavaScript进阶练习及简单实例分析
2016/06/03 Javascript
js 判断各种数据类型的简单方法(推荐)
2016/08/29 Javascript
Javascript 调用 ActionScript 的简单方法
2016/09/22 Javascript
nodejs实现发出蜂鸣声音(系统报警声)的方法
2017/01/18 NodeJs
webpack配置的最佳实践分享
2017/04/21 Javascript
微信小程序 蓝牙的实现实例代码
2017/06/27 Javascript
jsTree事件和交互以及插件plugins详解
2017/08/29 Javascript
深入浅析Node环境和浏览器的区别
2018/08/14 Javascript
详解Angular5/Angular6项目如何添加热更新(HMR)功能
2018/10/10 Javascript
javascript自定义加载loading效果
2020/09/15 Javascript
JavaScript实现京东快递单号查询
2020/11/30 Javascript
python实现倒计时的示例
2014/02/14 Python
使用python Fabric动态修改远程机器hosts的方法
2018/10/26 Python
Python中最大递归深度值的探讨
2019/03/05 Python
python树的同构学习笔记
2019/09/14 Python
Python 安装 virturalenv 虚拟环境的教程详解
2020/02/21 Python
python简单实现最大似然估计&amp;scipy库的使用详解
2020/04/15 Python
前端实现背景虚化但内容清晰且自适应 的实例代码
2019/08/01 HTML / CSS
全球游戏Keys和卡片市场:GamesDeal
2018/03/28 全球购物
Weblogic和WebSphere不同特点
2012/05/09 面试题
建筑施工实习自我鉴定
2013/09/19 职场文书
生物制药毕业生自荐信
2013/10/16 职场文书
医学护理毕业生自荐信
2013/11/07 职场文书
网络信息安全承诺书
2014/03/26 职场文书
防灾减灾活动总结
2014/08/30 职场文书
毕业实习单位意见
2015/06/04 职场文书
党员转正大会主持词
2015/07/02 职场文书
《世界多美呀》教学反思
2016/02/22 职场文书