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


Posted in Python onApril 18, 2015

本文实例讲述了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开发常用的一些开源Package分享
Feb 14 Python
python基于windows平台锁定键盘输入的方法
Mar 05 Python
pymongo实现多结果进行多列排序的方法
May 16 Python
Python三级目录展示的实现方法
Sep 28 Python
python3中int(整型)的使用教程
Mar 23 Python
详解Python 序列化Serialize 和 反序列化Deserialize
Aug 20 Python
python爬取哈尔滨天气信息
Jul 14 Python
python 将列表中的字符串连接成一个长路径的方法
Oct 23 Python
纯用NumPy实现神经网络的示例代码
Oct 24 Python
python如何读取bin文件并下发串口
Jul 05 Python
简述python&pytorch 随机种子的实现
Oct 07 Python
教你如何用Python实现人脸识别(含源代码)
Jun 23 Python
python使用multiprocessing模块实现带回调函数的异步调用方法
Apr 18 #Python
python对指定目录下文件进行批量重命名的方法
Apr 18 #Python
python开启多个子进程并行运行的方法
Apr 18 #Python
C#返回当前系统所有可用驱动器符号的方法
Apr 18 #Python
python关闭windows进程的方法
Apr 18 #Python
python使用Queue在多个子进程间交换数据的方法
Apr 18 #Python
python获取当前计算机cpu数量的方法
Apr 18 #Python
You might like
递归实现php数组转xml的代码分享
2015/05/14 PHP
php入门教程之Zend Studio设置与开发实例
2016/09/09 PHP
thinkphp3.2实现跨控制器调用其他模块的方法
2017/03/14 PHP
jqGrid随窗口大小变化自适应大小的示例代码
2013/12/28 Javascript
Javascript中Array.prototype.map()详解
2014/10/22 Javascript
对比分析json及XML
2014/11/28 Javascript
基于jquery实现表格无刷新分页
2016/01/07 Javascript
javascript弹出窗口中增加确定取消按钮
2016/06/24 Javascript
JS区分Object与Aarry的六种方法总结
2017/02/27 Javascript
Angular排序实例详解
2017/06/28 Javascript
详解VueJS 数据驱动和依赖追踪分析
2017/07/26 Javascript
在Vue组件中使用 TypeScript的方法
2018/02/28 Javascript
浅谈vue-cli 3.0.x 初体验
2018/04/11 Javascript
layui关闭弹窗后刷新主页面和当前更改项的例子
2019/09/06 Javascript
vue中uni-app 实现小程序登录注册功能
2019/10/12 Javascript
Vue移动端用淘宝弹性布局lib-flexible插件做适配的方法
2020/05/26 Javascript
js利用iframe实现选项卡效果
2020/08/09 Javascript
小程序实现密码输入框
2020/11/16 Javascript
python在Windows8下获取本机ip地址的方法
2015/03/14 Python
Python中的fileinput模块的简单实用示例
2015/07/09 Python
python框架django基础指南
2016/09/08 Python
Flask框架的学习指南之制作简单blog系统
2016/11/20 Python
Python3.6.2调用ffmpeg的方法
2019/01/10 Python
python文本数据处理学习笔记详解
2019/06/17 Python
Python登录系统界面实现详解
2019/06/25 Python
Django为窗体加上防机器人的验证码功能过程解析
2019/08/14 Python
Anaconda3中的Jupyter notebook添加目录插件的实现
2020/05/18 Python
CSS3 优势以及网页设计师如何使用CSS3技术
2009/07/29 HTML / CSS
用CSS3来实现社交分享按钮
2014/11/11 HTML / CSS
HTML5有哪些新特征
2015/12/01 HTML / CSS
百联网上商城:i百联
2017/01/28 全球购物
美国女士泳装店:Swimsuits For All
2017/03/02 全球购物
经营场所使用证明
2015/06/19 职场文书
Python使用sql语句对mysql数据库多条件模糊查询的思路详解
2021/04/12 Python
Log4j.properties配置及其使用
2021/08/02 Java/Android
sqlserver连接错误之SQL评估期已过的问题解决
2022/03/23 SQL Server