python 超時裝飾器

2021-10-19 14:32:35 字數 1433 閱讀 1809

# conda安裝:

(bash) adocir@adocir:~$ conda install -c conda-forge func_timeout

# pip安裝:

(bash) adocir@adocir:~$ pip install func_timeout

@func_set_timeout(1)

設定裝飾器觸發超時時間為1秒,僅設定該引數會觸發超時但程式會丟擲異常。

可以在程式中捕獲異常處理

#!/usr/bin/env python

# -*- coding: utf-8 -*-

​from func_timeout import func_set_timeout

import time

import func_timeout

@func_set_timeout(1)

test():

time.sleep(2)

print

('test'

)if __name__ ==

'__main__'

:try

: test(

)except func_timeout.exceptions.functiontimedout:

print

('func_timeout'

)

或者建立乙個自定義超時裝飾器並捕獲異常

#!/usr/bin/env python

# -*- coding: utf-8 -*-

import time

from func_timeout import func_set_timeout, functiontimedout

deftime_out

(fn,

*args,

**kwargs)

:def

(*args,

**kwargs)

:try

: result = fn(

*args,

**kwargs)

return result

except functiontimedout:

print

('timeout'

)return

'time_out'

@time_out

@func_set_timeout(1)

deftest()

: time.sleep(3)

return

'test'

if __name__ ==

'__main__'

: test_ = test(

)print

(test_)

python裝飾器 Python 裝飾器

簡言之,python裝飾器就是用於拓展原來函式功能的一種函式,這個函式的特殊之處在於它的返回值也是乙個函式,使用python裝飾器的好處就是在不用更改原函式的 前提下給函式增加新的功能。一般而言,我們要想拓展原來函式 最直接的辦法就是侵入 裡面修改,例如 這是我們最原始的的乙個函式,然後我們試圖記錄...

python裝飾器 裝飾器

由於函式也是乙個物件,而且函式物件可以被賦值給變數,所以,通過變數也能呼叫該函式。def now print 2015 3 25 f now f 2015 3 25 函式物件有乙個 name 屬性,可以拿到函式的名字 now.name now f.name now 現在,假設我們要增強now 函式的...

python裝飾器原理 Python裝飾器原理

裝飾器 decorator 是物件導向設計模式的一種,這種模式的核心思想是在不改變原來核心業務邏輯 的情況下,對函式或類物件進行額外的修飾。python中的裝飾器由python直譯器直接支援,其定義形式如下 decorator def core service 要理解上述 的含義,我們從自定義函式裝...