1.超时函数

这个函数的作用在于可以给任意可能会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 resultreturn functools.wraps(func)(wrapper)return decorated

使用:

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

2.Trace函数

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

Trace装饰器的代码如下:

'''
学习中遇到问题没人解答?小编创建了一个Python学习交流QQ群:725638078
寻找有志同道合的小伙伴,互帮互助,群里还有不错的视频学习教程和PDF电子书!
'''
import sys,os,linecache
def trace(f):def globaltrace(frame, why, arg):if why == "call": return localtracereturn Nonedef localtrace(frame, why, arg):if why == "line":# record the file name and line number of every tracefilename = frame.f_code.co_filenamelineno = frame.f_linenobname = os.path.basename(filename)print("{}({}): {}".format(  bname,lineno,linecache.getline(filename, lineno).strip('\r\n')),)return localtracedef _f(*args, **kwds):sys.settrace(globaltrace)result = f(*args, **kwds)sys.settrace(None)return resultreturn _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

结尾给大家推荐一个非常好的学习教程,希望对你学习Python有帮助!

Python基础入门教程推荐

Python爬虫案例教程推荐

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

  1. 推荐8个炫酷的 Python 装饰器!

    Python 编程语言的一大优点是它把所有功能都打包到一个小包中,这些功能非常有用.许多特性可以完全改变 Python 代码的功能,这使得该语言更加灵活.如果使用得当,其中一些功能可以有效缩短编写程序 ...

  2. 推荐 8 个炫酷的 Python 装饰器

    前言 Python 编程语言的一大优点是它把所有功能都打包到一个小包中,这些功能非常有用. 许多特性可以完全改变 Python 代码的功能,这使得该语言更加灵活.如果使用得当,其中一些功能可以有效缩短 ...

  3. 超棒!推荐八个炫酷的 Python 装饰器!

    Python 编程语言的一大优点是它把所有功能都打包到一个小包中,这些功能非常有用. 许多特性可以完全改变 Python 代码的功能,这使得该语言更加灵活.如果使用得当,其中一些功能可以有效缩短编写程 ...

  4. Python 装饰器 函数

    Python装饰器学习(九步入门):http://www.cnblogs.com/rhcad/archive/2011/12/21/2295507.html 浅谈Python装饰器:https://b ...

  5. python装饰器实例-Python装饰器实用例子

    Python里我们经常能见到@开头的句法,也就是人们常说的装饰器(decorator).装饰器是Python非常重要的一部分,能够产出更易于维护的代码.这篇文章会给大家带来装饰器的介绍以及几个实用的例 ...

  6. python装饰器-python装饰器简介---这一篇也许就够了(推荐)

    Python装饰器(decorator)是在程序开发中经常使用到的功能,合理使用装饰器,能让我们的程序如虎添翼. 装饰器引入 初期及问题诞生 假如现在在一个公司,有A B C三个业务部门,还有S一个基 ...

  7. Python装饰器——四两拨千斤还是杀鸡用牛刀?

    一.引言 最近做了一个小小小项目,写了一些偏工程的代码.项目的目的看起来很简单,就是去组里的一个能显示调试信息网站上,根据我们提供的一堆查询,获取调试信息的response,然后离线的解析来完成后续实 ...

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

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

  9. python装饰器-如何更通俗地讲解Python的装饰器?

    我从以下几点,由浅入深详细讲解一下Python装饰器:什么是装饰器? 为什么用装饰器? 在哪里用装饰器? 然后以示例+讲解相结合的方式阐述,同时会讲解一些在很多教程和书籍中不会涉及到的内容. 什么是P ...

  10. python装饰器详解-如何更通俗地讲解Python的装饰器?

    我从以下几点,由浅入深详细讲解一下Python装饰器:什么是装饰器? 为什么用装饰器? 在哪里用装饰器? 然后以示例+讲解相结合的方式阐述,同时会讲解一些在很多教程和书籍中不会涉及到的内容. 什么是P ...

最新文章

  1. 一个button导致的慘案
  2. web自动化如何在不同浏览器运行_Web自动化测试:元素的基础操作和浏览器基础操作...
  3. JavaScript面向对象——理解构造函数继承(类继承)
  4. 【机器学习】主元分析(PCA)以及与SVD的区别联系
  5. creator 静态属性_cocos creator 属性面板设置
  6. 【logstash】logstash monitor
  7. (9)Redis-Cluster集群理论及实践【下】
  8. wget 下载需要登录验证的网页文件
  9. Ext3.4.0中EditorGridPanel可以复制文本
  10. 更改html默认浏览器,怎么更改默认浏览器?默认浏览器设置在哪里
  11. FPGA | PYNQ-Z2使用语音播报模块
  12. 最通俗的 Python3 网络爬虫入门
  13. CS294(285)策略梯度学习笔记
  14. KDC Server安装
  15. DQN的e-greedy策略理解
  16. 第二届Techo TVP 开发者峰会有感
  17. 【项目】森林预言家——森林火灾预防系统
  18. 阿里云对象存储OSS文件上传
  19. 核心单词Word List 39
  20. 【老九学堂】【初识C语言】常用字符串函数

热门文章

  1. 基于.NET平台常用的框架整理(转)
  2. facebook海量图片存储系统与淘宝TFS系统比较
  3. MasterPage技术
  4. ASP.NET 2.0 XML 系列(2): XML技术
  5. 大数据技术基础_【基础】大数据技术栈介绍
  6. ABAP DOI详解(3)
  7. 释疑の语法Unpackpack
  8. ALEIDoc EDI(5)--Inbound Function
  9. 项目经理的十二条规则
  10. 央行放水点燃房价,普通家庭如何理财?