超时函数

这个函数的作用在于可以给任意可能会hang住的函数添加超时功能,这个功能在编写外部API调用 、网络爬虫、数据库查询的时候特别有用

timeout装饰器的代码如下:

import signal,functools #下面会用到的两个库 class TimeoutError(Exception): pass #定义一个Exception,后面超时抛出 def timeout(seconds, error_message = 'Function call timed out'): def decorated(func): def _handle_timeout(signum, frame): raise TimeoutError(error_message) def wrapper(*args, **kwargs): signal.signal(signal.SIGALRM, _handle_timeout) signal.alarm(seconds) try: result = func(*args, **kwargs) finally: signal.alarm(0) return result return functools.wraps(func)(wrapper) return decorated 

使用:

@timeout(5) #限定下面的slowfunc函数如果在5s内不返回就强制抛TimeoutError Exception结束 def slowfunc(sleep_time): import time time.sleep(sleep_time) #这个函数就是休眠sleep_time秒 slowfunc(3) #sleep 3秒,正常返回 没有异常 slowfunc(10) #被终止 ## 输出 --------------------------------------------------------------------------- TimeoutError Traceback (most recent call last) 

Trace函数

有时候出于演示目的或者调试目的,我们需要程序运行的时候打印出每一步的运行顺序 和调用逻辑。类似写bash的时候的bash -x调试功能,然后Python解释器并没有 内置这个时分有用的功能,那么我们就“自己动手,丰衣足食”。

Trace装饰器的代码如下:

import sys,os,linecache def trace(f): def globaltrace(frame, why, arg): if why == "call": return localtrace return None def localtrace(frame, why, arg): if why == "line": # record the file name and line number of every trace filename = frame.f_code.co_filename lineno = frame.f_lineno bname = os.path.basename(filename) print "{}({}): {}".format( bname, lineno, linecache.getline(filename, lineno).strip('\r\n')), return localtrace def _f(*args, **kwds): sys.settrace(globaltrace) result = f(*args, **kwds) sys.settrace(None) return result return _f 

使用:

@trace
def xxx():
print 1 print 22 print 333 xxx() #调用 ## 输出 <ipython-input-4-da50741ac84e>(3): print 1 # @trace 的输出 1 <ipython-input-4-da50741ac84e>(4): print 22 # @trace 的输出 22 <ipython-input-4-da50741ac84e>(5): print 333 # @trace 的输出 333

作者:auxten链接:https://zhuanlan.zhihu.com/p/20175869

两个实用的Python的装饰器相关推荐

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

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

  2. python turtle画气球-如何用python的装饰器定义一个像C++一样的强

    如何用python的装饰器定义一个像C++一样的强 Python作为一个动态的脚本语言,其函数在定义时是不需要指出参数的类型,也不需要指出函数是否有返回值.使用python的装饰器来定义一个像C++那 ...

  3. Python之装饰器

    Python之装饰器 在不修改函数调用方式的前提下,也不能修改函数内部源代码!!!! 例如: 在每个季度公司发绩效,统计每个人的代码执行效率.咱们总不能是每个函数里加time模块吧. import t ...

  4. python简单装饰器_python装饰器的简单示例

    这篇文章主要为大家详细介绍了python装饰器的简单示例,具有一定的参考价值,可以用来参考一下. 对python这个高级语言感兴趣的小伙伴,下面一起跟随512笔记的小编两巴掌来看看吧! 装饰器的语法以 ...

  5. 浅谈Django的中间件与Python的装饰器

    浅谈Django的中间件 与Python的装饰器 一.原理 1.装饰器是Python的一种语法应用,利用闭包的原理去更改一个函数的功能,即让一个函数执行之前先到另外一个函数中执行其他需求语句,在执行该 ...

  6. Python的装饰器

    详解Python的装饰器 本文源码 https://github.com/tobyqin/python_decorator Python中的装饰器是你进入Python大门的一道坎,不管你跨不跨过去它都 ...

  7. python中装饰器的作用_Python装饰器详解,详细介绍它的应用场景

    装饰器的应用场景附加功能 数据的清理或添加:函数参数类型验证 @require_ints 类似请求前拦截数据格式转换 将函数返回字典改为 JSON/YAML 类似响应后篡改为函数提供额外的数据 moc ...

  8. python装饰器函数-python函数装饰器

    什么是装饰器 装饰器是一个可调用的对象,其参数是另一个函数(被装饰的函数).装饰器可能会: 1,处理被装饰的函数,然后把它返回 2,将其替换成另一个函数或者对象 若有个名为decorate的装饰器,则 ...

  9. python装饰器函数-Python函数装饰器常见使用方法实例详解

    本文实例讲述了Python函数装饰器常见使用方法.分享给大家供大家参考,具体如下: 一.装饰器 首先,我们要了解到什么是开放封闭式原则? 软件一旦上线后,对修改源代码是封闭的,对功能的扩张是开放的,所 ...

最新文章

  1. 【Step By Step】将Dotnet Core部署到Docker下
  2. CPU和GPU跑深度学习差别有多大?
  3. c++设计一个不能被继承的类
  4. [原创] Debian9上配置Samba
  5. linux命令awk
  6. 开发工程师面试自我介绍_30道经典面试题,靠它我在一线拿到了20k的前端开发工程师岗位...
  7. Linux安装FTP服务-----vsftpd
  8. 想成功创业:要掌握“三笔钱”和“六三一”原则
  9. 如何创建一个Eureka Client?
  10. 中国豪华的政府大楼VS破学校
  11. python map函数返回类型_使用map和lambda函数发送两个参数并返回两个值
  12. 众人帮蚂蚁帮任务平台修复版源码
  13. 这是一个最不缺“大师”的时代
  14. 不敢相信?System.currentTimeMillis() 居然存在性能问题
  15. java doc转mht_Word文档格式doc转为mht.doc
  16. 河北农大计算机专业全国排名,2019河北农业大学现代科技学院专业排名
  17. Gary Marcus再发万字长文,列14个QA回应机器学习批判言论
  18. Hi3518EV300芯片linux系统配置USB Camera功能
  19. 我需要30部美或英剧的剧名
  20. tengine简单安装_阿里云tengine的安装 -- by hzw

热门文章

  1. python2和python3如何共存,如何安装多版本python python2和python3共存以及pip共存
  2. time、random以及序列化模块
  3. 数据库备份DBS 新增Region支持:华北2、华东2和华南1
  4. Spring思维导图(IOC篇)
  5. JavaScript模仿块级作用域
  6. 怎么查看Beyond Compare所有会话日志消息
  7. 官方宣布:谷歌开发者中国网站正式发布!
  8. CSS3选择器:nth-child和:nth-of-type之间的差异的那些事儿
  9. puppet系列之nginx+php日志切割与salt结合使用
  10. [游泳] Sun Yang 1500 Swimming Stroke Analysis London 2012