python使用装饰器和线程限制函数执行时间的方法

 更新时间:2015年04月18日 14:25:22   作者:lele  
这篇文章主要介绍了python使用装饰器和线程限制函数执行时间的方法,主要涉及timelimited函数的使用技巧,非常具有实用价值,需要的朋友可以参考下

本文实例讲述了python使用装饰器和线程限制函数执行时间的方法。分享给大家供大家参考。具体分析如下:

很多时候函数内部包含了一些不可预知的事情,比如调用其它软件,从网络抓取信息,可能某个函数会卡在某个地方不动态,这段代码可以用来限制函数的执行时间,只需要在函数的上方添加一个装饰器,timelimited(2)就可以限定函数必须在2秒内执行完成,如果执行完成则返回函数正常的返回值,如果执行超时则会抛出错误信息。

# -*- coding: utf-8 -*-
from threading import Thread
import time
class TimeoutException(Exception):
  pass
ThreadStop = Thread._Thread__stop#获取私有函数
def timelimited(timeout):
  def decorator(function):
    def decorator2(*args,**kwargs):
      class TimeLimited(Thread):
        def __init__(self,_error= None,):
          Thread.__init__(self)
          self._error = _error
        def run(self):
          try:
            self.result = function(*args,**kwargs)
          except Exception,e:
            self._error =e
        def _stop(self):
          if self.isAlive():
            ThreadStop(self)
      t = TimeLimited()
      t.start()
      t.join(timeout)
      if isinstance(t._error,TimeoutException):
        t._stop()
        raise TimeoutException('timeout for %s' % (repr(function)))
      if t.isAlive():
        t._stop()
        raise TimeoutException('timeout for %s' % (repr(function)))
      if t._error is None:
        return t.result
    return decorator2
  return decorator
@timelimited(2)
def fn_1(secs):
  time.sleep(secs)
  return 'Finished'
if __name__ == "__main__":
  print fn_1(4)

希望本文所述对大家的Python程序设计有所帮助。

相关文章

  • 安装完Python包然后找不到模块的解决步骤

    安装完Python包然后找不到模块的解决步骤

    今天小编就为大家分享一篇安装完Python包然后找不到模块的解决步骤,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2020-02-02
  • python动态规划算法实例详解

    python动态规划算法实例详解

    在本篇文章里小编给大家整理了关于python动态规划算法实例内容,有需要的朋友们可以参考学习下。
    2020-11-11
  • python爬虫之代理ip正确使用方法实例

    python爬虫之代理ip正确使用方法实例

    在爬虫的过程中,我们经常会遇见很多网站采取了防爬虫技术,或者说因为自己采集网站信息的强度和采集速度太大,给对方服务器带去了太多的压力,下面这篇文章主要给大家介绍了关于python爬虫之代理ip正确使用方法的相关资料,需要的朋友可以参考下
    2022-07-07
  • 使用pygame模块编写贪吃蛇的实例讲解

    使用pygame模块编写贪吃蛇的实例讲解

    下面小编就为大家分享一篇使用pygame模块编写贪吃蛇的实例讲解,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2018-02-02
  • Django框架HttpRequest对象用法实例分析

    Django框架HttpRequest对象用法实例分析

    这篇文章主要介绍了Django框架HttpRequest对象用法,结合实例形式分析了Django框架HttpRequest对象发送请求数据的相关使用技巧,需要的朋友可以参考下
    2019-11-11
  • Python中dict排序的两种方法

    Python中dict排序的两种方法

    字典本身是无序的,所以它每次输出都是不一样的,顺序都是乱的,那么字典如何排序,本文主要介绍了Python中dict排序的两种方法,感兴趣的可以了解一下
    2024-01-01
  • 使用Scrapy爬取动态数据

    使用Scrapy爬取动态数据

    今天小编就为大家分享一篇关于使用Scrapy爬取动态数据的文章,小编觉得内容挺不错的,现在分享给大家,具有很好的参考价值,需要的朋友一起跟随小编来看看吧
    2018-10-10
  • Python Flask异步发送邮件实现方法解析

    Python Flask异步发送邮件实现方法解析

    这篇文章主要介绍了Python Flask异步发送邮件实现方法解析,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
    2020-08-08
  • Python 26进制计算实现方法

    Python 26进制计算实现方法

    这篇文章主要介绍了Python 26进制计算实现方法,涉及Python字符串与数值计算的相关操作技巧,需要的朋友可以参考下
    2015-05-05
  • python中绑定方法与非绑定方法的实现示例

    python中绑定方法与非绑定方法的实现示例

    本文主要介绍了python中绑定方法与非绑定方法的实现示例,文中通过示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2021-09-09

最新评论