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

Python裝飾器限制函數(shù)運行時間超時則退出執(zhí)行

 更新時間:2019年04月09日 15:35:57   作者:-牧野-  
今天小編就為大家分享一篇關(guān)于Python裝飾器限制函數(shù)運行時間超時則退出執(zhí)行,小編覺得內(nèi)容挺不錯的,現(xiàn)在分享給大家,具有很好的參考價值,需要的朋友一起跟隨小編來看看吧

實際項目中會涉及到需要對有些函數(shù)的響應(yīng)時間做一些限制,如果超時就退出函數(shù)的執(zhí)行,停止等待。

可以利用python中的裝飾器實現(xiàn)對函數(shù)執(zhí)行時間的控制。

python裝飾器簡單來說可以在不改變某個函數(shù)內(nèi)部實現(xiàn)和原來調(diào)用方式的前提下對該函數(shù)增加一些附件的功能,提供了對該函數(shù)功能的擴(kuò)展。

方法一. 使用 signal

# coding=utf-8
import signal
import time
def set_timeout(num, callback):
  def wrap(func):
    def handle(signum, frame): # 收到信號 SIGALRM 后的回調(diào)函數(shù),第一個參數(shù)是信號的數(shù)字,第二個參數(shù)是the interrupted stack frame.
      raise RuntimeError
    def to_do(*args, **kwargs):
      try:
        signal.signal(signal.SIGALRM, handle) # 設(shè)置信號和回調(diào)函數(shù)
        signal.alarm(num) # 設(shè)置 num 秒的鬧鐘
        print('start alarm signal.')
        r = func(*args, **kwargs)
        print('close alarm signal.')
        signal.alarm(0) # 關(guān)閉鬧鐘
        return r
      except RuntimeError as e:
        callback()
    return to_do
  return wrap
def after_timeout(): # 超時后的處理函數(shù)
  print("Time out!")
@set_timeout(2, after_timeout) # 限時 2 秒超時
def connect(): # 要執(zhí)行的函數(shù)
  time.sleep(3) # 函數(shù)執(zhí)行時間,寫大于2的值,可測試超時
  print('Finished without timeout.')
if __name__ == '__main__':
  connect()

方法一中使用的signal有所限制,需要在linux系統(tǒng)上,并且需要在主線程中使用。方法二使用線程計時,不受此限制。

方法二. 使用Thread

# -*- 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 = str(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) # 設(shè)置運行超時時間2S
def fn_1(secs):
  time.sleep(secs)
  return 'Finished without timeout'
def do_something_after_timeout():
  print('Time out!')
if __name__ == "__main__":
  try:
    print(fn_1(3)) # 設(shè)置函數(shù)執(zhí)行3S
  except TimeoutException as e:
    print(str(e))
    do_something_after_timeout()

總結(jié)

以上就是這篇文章的全部內(nèi)容了,希望本文的內(nèi)容對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,謝謝大家對腳本之家的支持。如果你想了解更多相關(guān)內(nèi)容請查看下面相關(guān)鏈接

相關(guān)文章

  • 使用python telnetlib批量備份交換機(jī)配置的方法

    使用python telnetlib批量備份交換機(jī)配置的方法

    今天小編就為大家分享一篇使用python telnetlib批量備份交換機(jī)配置的方法,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2019-07-07
  • Linux環(huán)境下安裝python3

    Linux環(huán)境下安裝python3

    這篇文章介紹了Linux環(huán)境下安裝python3的方法,對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2022-07-07
  • Python 切片索引越界的問題(數(shù)組下標(biāo)越界)

    Python 切片索引越界的問題(數(shù)組下標(biāo)越界)

    Python語言處理字符串、數(shù)組類的問題時有一定概率需要使用切片方法,本文主要介紹了Python 切片索引越界的問題,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2021-12-12
  • Python 合并拼接字符串的方法

    Python 合并拼接字符串的方法

    這篇文章主要介紹了Python 合并拼接字符串的方法,文中講解非常細(xì)致,代碼幫助大家更好的理解和學(xué)習(xí),感興趣的朋友可以了解下
    2020-07-07
  • Django應(yīng)用程序中如何發(fā)送電子郵件詳解

    Django應(yīng)用程序中如何發(fā)送電子郵件詳解

    我們常常會用到一些發(fā)送郵件的功能,比如有人提交了應(yīng)聘的表單,可以向HR的郵箱發(fā)郵件,這樣,HR不看網(wǎng)站就可以知道有人在網(wǎng)站上提交了應(yīng)聘信息。下面這篇文章就介紹了在Django應(yīng)用程序中如何發(fā)送電子郵件的相關(guān)資料,需要的朋友可以參考借鑒。
    2017-02-02
  • Python個人博客程序開發(fā)實例后臺編寫

    Python個人博客程序開發(fā)實例后臺編寫

    這篇文章主要介紹了怎樣用Python來實現(xiàn)一個完整的個人博客系統(tǒng),我們通過實操上手的方式可以高效的鞏固所學(xué)的基礎(chǔ)知識,感興趣的朋友一起來看看吧
    2022-12-12
  • Python 腳本獲取ES 存儲容量的實例

    Python 腳本獲取ES 存儲容量的實例

    今天小編就為大家分享一篇Python 腳本獲取ES 存儲容量的實例,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2018-12-12
  • python 生成正態(tài)分布數(shù)據(jù),并繪圖和解析

    python 生成正態(tài)分布數(shù)據(jù),并繪圖和解析

    這篇文章主要介紹了python 生成正態(tài)分布數(shù)據(jù),并繪圖和解析,幫助大家更好的利用python進(jìn)行數(shù)據(jù)分析,感興趣的朋友可以了解下
    2020-12-12
  • 僅用50行代碼實現(xiàn)一個Python編寫的計算器的教程

    僅用50行代碼實現(xiàn)一個Python編寫的計算器的教程

    這篇文章主要介紹了僅用50行代碼實現(xiàn)一個Python編寫的計算器的教程,主要用到了PlyPlus庫使得核心代碼十分簡單,需要的朋友可以參考下
    2015-04-04
  • python誤差棒圖errorbar()函數(shù)實例解析

    python誤差棒圖errorbar()函數(shù)實例解析

    這篇文章主要介紹了python誤差棒圖errorbar()函數(shù)實例解析,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友可以參考下
    2020-02-02

最新評論

根河市| 竹山县| 禄劝| 安宁市| 元江| 缙云县| 威远县| 定南县| 扬中市| 中西区| 连南| 龙州县| 长治县| 巨野县| 新晃| 彝良县| 南城县| 临泽县| 武宣县| 靖远县| 乌审旗| 嘉鱼县| 嘉黎县| 大理市| 休宁县| 佳木斯市| 苍山县| 玉环县| 马关县| 宁夏| 高雄市| 武陟县| 平湖市| 广丰县| 汽车| 大关县| 招远市| 鲜城| 通辽市| 保定市| 越西县|