最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

python使用裝飾器和線程限制函數(shù)執(zhí)行時(shí)間的方法

 更新時(shí)間:2015年04月18日 14:25:22   作者:lele  
這篇文章主要介紹了python使用裝飾器和線程限制函數(shù)執(zhí)行時(shí)間的方法,主要涉及timelimited函數(shù)的使用技巧,非常具有實(shí)用價(jià)值,需要的朋友可以參考下

本文實(shí)例講述了python使用裝飾器和線程限制函數(shù)執(zhí)行時(shí)間的方法。分享給大家供大家參考。具體分析如下:

很多時(shí)候函數(shù)內(nèi)部包含了一些不可預(yù)知的事情,比如調(diào)用其它軟件,從網(wǎng)絡(luò)抓取信息,可能某個(gè)函數(shù)會卡在某個(gè)地方不動態(tài),這段代碼可以用來限制函數(shù)的執(zhí)行時(shí)間,只需要在函數(shù)的上方添加一個(gè)裝飾器,timelimited(2)就可以限定函數(shù)必須在2秒內(nèi)執(zhí)行完成,如果執(zhí)行完成則返回函數(shù)正常的返回值,如果執(zhí)行超時(shí)則會拋出錯(cuò)誤信息。

# -*- coding: utf-8 -*-
from threading import Thread
import time
class TimeoutException(Exception):
  pass
ThreadStop = Thread._Thread__stop#獲取私有函數(shù)
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程序設(shè)計(jì)有所幫助。

相關(guān)文章

最新評論

陇南市| 托克托县| 鹤山市| 桂阳县| 信宜市| 宁波市| 吕梁市| 青川县| 青川县| 丹东市| 桐柏县| 太原市| 武汉市| 太仓市| 湘阴县| 香格里拉县| 祁连县| 台东市| 渝中区| 墨玉县| 三门县| 安溪县| 景德镇市| 桂东县| 天柱县| 咸宁市| 三台县| 富民县| 平顶山市| 阿图什市| 南漳县| 田阳县| 武穴市| 海宁市| 贡嘎县| 平顶山市| 仙居县| 文安县| 梁河县| 蒲江县| 焉耆|