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中几种操作字符串的方法的介绍
Apr 09 Python
在Django框架中编写Context处理器的方法
Jul 20 Python
30秒轻松实现TensorFlow物体检测
Mar 14 Python
python画折线图的程序
Jul 26 Python
Opencv-Python图像透视变换cv2.warpPerspective的示例
Apr 11 Python
在Python中COM口的调用方法
Jul 03 Python
Python 实现使用空值进行赋值 None
Mar 12 Python
Python celery原理及运行流程解析
Jun 13 Python
通过代码实例了解Python3编程技巧
Oct 13 Python
Python WebSocket长连接心跳与短连接的示例
Nov 24 Python
python实现简单猜单词游戏
Dec 24 Python
python实现ping命令小程序
Dec 28 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中文处理 中文字符串截取(mb_substr)和获取中文字符串字数
2011/11/10 PHP
安装apache2.2.22配置php5.4(具体操作步骤)
2013/06/26 PHP
单点登录 Ucenter示例分析
2013/10/29 PHP
php隐藏实际地址的文件下载方法
2015/04/18 PHP
yii2实现根据时间搜索的方法
2016/05/25 PHP
PHP判断密码强度的方法详解
2017/05/26 PHP
js原生appendChild的bug解决心得分享
2013/07/01 Javascript
javascript setinterval 的正确语法如何书写
2014/06/17 Javascript
jQuery实现Flash效果上下翻动的中英文导航菜单代码
2015/09/22 Javascript
jquery实现模拟百分比进度条渐变效果代码
2015/10/29 Javascript
jQuery ui autocomplete选择列表被Bootstrap模态窗遮挡的完美解决方法
2016/09/23 Javascript
原生js实现中奖信息无间隙滚动效果
2017/01/18 Javascript
react-router中的属性详解
2017/06/01 Javascript
vue2 mint-ui loadmore实现下拉刷新,上拉更多功能
2018/03/21 Javascript
ES6关于Promise的用法详解
2018/05/07 Javascript
微信小程序生成二维码的示例代码
2019/03/29 Javascript
微信小程序实现卡片层叠滑动效果
2019/06/21 Javascript
JS数组Reduce方法功能与用法实例详解
2020/04/29 Javascript
Vue如何基于es6导入外部js文件
2020/05/15 Javascript
Python库urllib与urllib2主要区别分析
2014/07/13 Python
Python实现中一次读取多个值的方法
2018/04/22 Python
python连接、操作mongodb数据库的方法实例详解
2019/09/11 Python
python 检查数据中是否有缺失值,删除缺失值的方式
2019/12/02 Python
在django项目中导出数据到excel文件并实现下载的功能
2020/03/13 Python
详解移动端HTML5音频与视频问题及解决方案
2018/08/22 HTML / CSS
伦敦剧院门票:London Theatre Direct
2018/11/21 全球购物
英国工作场所设备购买网站:Slingsby
2019/05/03 全球购物
自我介绍演讲稿
2014/01/15 职场文书
垃圾分类的活动方案
2014/08/15 职场文书
党员年度个人总结
2015/02/14 职场文书
2015大学生自我评价范文
2015/03/03 职场文书
计算机教师工作总结
2015/08/13 职场文书
导游词之山西祁县乔家大院
2019/10/14 职场文书
导游词之镇江西津古渡
2019/11/06 职场文书
CDPR谈《巫师》新作用虚幻5原因 称不会为Epic独占
2022/04/06 其他游戏