很多時候函式內部包含了一些不可預知的事情,比如呼叫其它軟體,從網路抓取資訊,可能某個函式會卡在某個地方不動態,這段**可以用來限制函式的執行時間,只需要在函式的上方新增乙個裝飾器,timelimited(2)就可以限定函式必www.cppcns.com須在2秒內執行完成,如果執行完成則返回函式正常的返回值,如果執行超時則會丟擲錯誤資訊。
# -*- coding: utf-8 -*-
from threading import thread
import time
class timeoutexception(exception):
pass
threadstop = thread._thread__sthjcqgcjoblop#獲取私有函式
def timelimited(timeout):
def decorator(function):
def decorator2(*args,**kwargs):
class timelimited(thread):
def __init__(self,_error= none,):
thread.__init__(s程式設計客棧elf)
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)
希望本文所述對大hjcqgcjobl家的python程式設計有所幫助。
本文標題: python使用裝飾器和執行緒限制函式執行時間的方法
本文位址: /jiaoben/python/123005.html
python 裝飾器和 property裝飾器
裝飾器 1 裝飾器函式的本質 乙個閉包函式 2 裝飾器函式的作用 在不修改原函式及其呼叫方式的情況下對原函式功能進行擴充套件 3 語法糖 格式 裝飾器名稱 4 建立帶返回值的裝飾器 5 建立傳遞引數的裝飾器 6 裝飾器的固定格式 def f definner args,kwargs ret f ar...
python裝飾器 如何使用函式裝飾器
問題舉例 有時候我們想為多個函式統一新增某種功能,比如計時統計 記錄日誌,快取運算結果等 我們並不想在每個函式內一一新增完全相同的 有什麼解決方案嗎?定義裝飾器函式,用它在原函式的基礎上生成乙個新增新功能的函式來代替原函式 def memo func cache def wrap args res ...
python 裝飾器的詳解和使用
裝飾器就是 函式名 加在被裝飾函式之前。有時候我們需要對函式功能進行擴充套件,但是又必須遵守開閉原則 ocp 不能修改函式,這時候就需要使用裝飾器。事實上,當我們想要擴充套件函式功能或者修改函式時,直接修改函式中的某幾行 就可以實現。但是這是有弊端的。綜合以上三點,這裡我們使用裝飾器就再好不過了。直...