python使用裝飾器和執行緒限制函式執行時間的方法

2022-09-27 08:45:18 字數 1495 閱讀 7162

很多時候函式內部包含了一些不可預知的事情,比如呼叫其它軟體,從網路抓取資訊,可能某個函式會卡在某個地方不動態,這段**可以用來限制函式的執行時間,只需要在函式的上方新增乙個裝飾器,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 不能修改函式,這時候就需要使用裝飾器。事實上,當我們想要擴充套件函式功能或者修改函式時,直接修改函式中的某幾行 就可以實現。但是這是有弊端的。綜合以上三點,這裡我們使用裝飾器就再好不過了。直...