# -*- coding: utf-8 -*-
# by dl
import time, logging# 带参数的装饰器 内部能返回个装饰器
def warn(timeout):# 真正的函数装饰器def decorator(func):# 定义包裹函数def wrapper(*args, **kargs):# 记录运行函数之前的时间点start = time.time()# 记录返回值 需要记录运行后的时间点res = func(*args, **kargs)# 运行的时间used = time.time() - start# 如果超时if used > timeout:# 创建消息 函数名 用时间 超时时间msg = '%s : %s > %s' % (func.__name__, used, timeout)# 日志接收消息logging.warning(msg)return res# 装饰器内return wrapperreturn wrapperdef setTimeout(k):# 类似于global 用于声明嵌套函数中的全局声明 python3才有nonlocal timeout# 这里用来赋值给装饰器的timeouttimeout = k# 通过调用函数 来设置timeoutwrapper.setTimeout = setTimeoutreturn decoratorfrom random import randint# 测试大于1.5s的
@warn(1.5)
def test():print('In test')# 随机延迟0.5while randint(0, 1):time.sleep(0.5)for _ in range(30):test()# 设置timeout为1
test.setTimeout(1)
for _ in range(30):test()

python 属性可修改的装饰器 监控函数的运行时间相关推荐

  1. 《Python cookbook》 “定义一个属性可由用户修改的装饰器” 笔记

    看<Python cookbook>的时候,第9.5部分,"定义一个属性可由用户修改的装饰器",有个装饰器理解起来花了一些时间,做个笔记免得二刷这本书的时候忘了 完整代 ...

  2. Python(三)对装饰器的理解

    装饰器是 Python 的一个重要部分,也是比较难理解和使用好的部分.下面对装饰器做一下简单整理 1. 前言 装饰器实际上是应用了设计模式里,装饰器模式的思想: 在不概念原有结构的情况下,添加新的功能 ...

  3. python闭包与装饰器有啥关系_深入理解Python中的闭包与装饰器

    函数的装饰器可以以某种方式增强函数的功能,如在 Flask 中可使用 @app.route('/') 为视图函数添加路由,是一种十分强大的功能.在表现形式上,函数装饰器为一种嵌套函数,这其中会涉及到闭 ...

  4. python闭包和装饰器的区别_深入理解Python中的闭包与装饰器

    函数的装饰器可以以某种方式增强函数的功能,如在 Flask 中可使用 @app.route('/') 为视图函数添加路由,是一种十分强大的功能.在表现形式上,函数装饰器为一种嵌套函数,这其中会涉及到闭 ...

  5. Python这些魔法方法和装饰器你都知道吗? O(≧▽≦)O Python小知识

    文章目录 魔法方法 __ len __ __ new __ cls与self的区别 Python派生内置不可变类型 __ enter __ 与 __ exit __ __ lt __. __ le _ ...

  6. python函数装饰函数_Python精进-装饰器与函数对象

    本文为<爬着学Python>系列第四篇文章. 从本篇开始,本专栏在顺序更新的基础上,会有不规则的更新. 在Python的学习与运用中,我们迟早会遇到装饰器,这个概念对于初识装饰器的新手来说 ...

  7. Python 进阶_闭包 amp; 装饰器

    目录 目录 闭包 函数的实质和属性 闭包有什么好处 小结 装饰器 更加深入的看看装饰器的执行过程 带参数的装饰器 装饰器的叠加 小结 装饰器能解决什么问题 小结 闭包 Closure: 如果内层函数引 ...

  8. python基础知识-11-函数装饰器

    python其他知识目录 1.装饰器学习前热身准备 1.1装饰器简介 1.2装饰器热身分析 1) def func():pass v1 = 10 v2 = func #将函数名赋予一个变量,就和变量赋 ...

  9. python装饰器函数-Python精进-装饰器与函数对象

    本文为<爬着学Python>系列第四篇文章. 从本篇开始,本专栏在顺序更新的基础上,会有不规则的更新. 在Python的学习与运用中,我们迟早会遇到装饰器,这个概念对于初识装饰器的新手来说 ...

最新文章

  1. XP`开机速度慢的解决方法
  2. win10系统winsxs文件夹该如何删除
  3. java取模多位数_JAVA大数类—基础操作(加减乘除、取模、四舍五入、设置保留位数)...
  4. 第五次作业 第三章例题
  5. python进行中文文本聚类(切词以及Kmeans聚类)
  6. Android基础整合项目之节日群发助手
  7. 使用 styled-components 定义组件样式
  8. echarts饼图自动动画_echarts饼图定时自动切换
  9. java中的迭代是什么意思_java迭代指的是什么意思
  10. SSM视频点播系统3.0
  11. Centos7下SVN服务端搭建以及hook应用
  12. python汉字拼音查询_python获取一组汉字的拼音首字母
  13. iPhoneX的faceID到底是一种怎样风骚的操作?
  14. UNI-APP之微信小程序转H5
  15. C语言和C++中locale设置
  16. android 贴身检测,安卓5.0贴身检测怎么设置_安卓贴身检测智能解锁设置方法_飞翔教程...
  17. wps文档一敲空格就换行_wps文档中第一行字后面有很多空格,可是第二行就是上不来,按删除键就会把第一行字删了,为什么...
  18. 月报总结|11月份Moonbeam最新进展及大事一览~
  19. 7、TIM定时器使用介绍
  20. 二维CAD工程师(机械设计)考试B卷

热门文章

  1. win10只有c盘怎么分区_磁盘分区:系统C盘空间不足怎么办?
  2. datename mysql_sql DATENAME 用法
  3. hive 安装_7.Hive介绍以及安装
  4. linux rpm 怎么解压缩,dpkg rpm apt yum 的常用指令 +linux 各种解压缩方法
  5. 2018,开工第一天
  6. react native 开发笔记(二)
  7. 一年后斩获腾讯T3,面试必问!
  8. java开发书籍,送大厂面经一份!
  9. 「高并发秒杀」mysql只修改字段名称
  10. 【Network Security!】深入浅出ARP协议使用中间人截获密码