欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

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

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

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

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

# -*- 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è)計有所幫助。

相關(guān)文章

  • Django與AJAX實現(xiàn)網(wǎng)頁動態(tài)數(shù)據(jù)顯示的示例代碼

    Django與AJAX實現(xiàn)網(wǎng)頁動態(tài)數(shù)據(jù)顯示的示例代碼

    這篇文章主要介紹了Django與AJAX實現(xiàn)網(wǎng)頁動態(tài)數(shù)據(jù)顯示的示例代碼,文中通過示例代碼介紹的非常詳細,對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2021-02-02
  • python中xlutils庫用法淺析

    python中xlutils庫用法淺析

    在本篇文章里小編給大家整理了一篇關(guān)于python中xluntils庫用法淺析的內(nèi)容,有需要的朋友們可以學(xué)習(xí)下。
    2020-12-12
  • Python操作MongoDB數(shù)據(jù)庫的方法示例

    Python操作MongoDB數(shù)據(jù)庫的方法示例

    這篇文章主要介紹了Python操作MongoDB數(shù)據(jù)庫的方法,結(jié)合實例形式分析了Python命令行模式下操作MongoDB數(shù)據(jù)庫實現(xiàn)連接、查找、刪除、排序等相關(guān)操作技巧,需要的朋友可以參考下
    2018-01-01
  • miniconda3介紹、安裝以及使用教程

    miniconda3介紹、安裝以及使用教程

    Miniconda是一款小巧的python環(huán)境管理工具,安裝包大約只有50M多點,其安裝程序中包含conda軟件包管理器和Python,下面這篇文章主要給大家介紹了關(guān)于miniconda3介紹、安裝以及使用的相關(guān)資料,需要的朋友可以參考下
    2023-02-02
  • Python計算斗牛游戲概率算法實例分析

    Python計算斗牛游戲概率算法實例分析

    這篇文章主要介紹了Python計算斗牛游戲概率算法,簡單介紹了斗牛游戲的原理并結(jié)合具體實例形式分析了相關(guān)的游戲概率算法,需要的朋友可以參考下
    2017-09-09
  • 解決PIP安裝第三方庫報錯SSL: CERTIFICATE_VERIFY_FAILED問題

    解決PIP安裝第三方庫報錯SSL: CERTIFICATE_VERIFY_FAILED問題

    這篇文章主要介紹了解決PIP安裝第三方庫報錯SSL: CERTIFICATE_VERIFY_FAILED問題,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教
    2024-01-01
  • 詳解Django中異步任務(wù)之django-celery

    詳解Django中異步任務(wù)之django-celery

    這篇文章主要介紹了詳解Django中異步任務(wù)之django-celery,本文通過場景分析實例圖文相結(jié)合給大家介紹的非常詳細,對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2020-11-11
  • 利用Python+eval函數(shù)構(gòu)建數(shù)學(xué)表達式計算器

    利用Python+eval函數(shù)構(gòu)建數(shù)學(xué)表達式計算器

    Python?中的函數(shù)eval()?是一個非常有用的工具。在本文中,云朵君將和大家一起學(xué)習(xí)?eval()?如何工作,以及如何在?Python?程序中安全有效地使用它,需要的可以參考一下
    2022-09-09
  • 詳解python配置虛擬環(huán)境

    詳解python配置虛擬環(huán)境

    這篇文章主要介紹了python配置虛擬環(huán)境,文中通過示例代碼介紹的非常詳細,對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2019-04-04
  • Python利用openpyxl庫遍歷Sheet的實例

    Python利用openpyxl庫遍歷Sheet的實例

    今天小編就為大家?guī)硪黄狿ython利用openpyxl庫遍歷Sheet的實例,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2018-05-05

最新評論