有時我們在寫代碼是,利用python的請求庫請求資料時,會有響應逾時或者響應持續沒反應的狀态,對于這種狀态需要進行監控,比如定時監控,超過設定的時間了,就傳回預設資料,進行辨別。
這次用線程類和全局變量的方式,進行逾時響應,下面對這兩個方法進行舉例:
一、線程類
定義線程函數
線程類函數,相當于多線程的方式,多線程是不能傳回值的,而線程類可以擷取傳回值,是以有線程需求的任務,可以用線程類的方式。
裝飾器函數
裝飾器部分設定子線程的方法。子線程随着主線程的退出而退出,是以主線程逾時了,就會觸發子線程的運作。
在測試函數的時候,就可以設定逾時時間和函數運作時間,進行測試。傳回結果就是出現了設定好的‘請求逾時’
二、全局變量法
由于多線程是不能擷取傳回值,那麼可以定義一個全局變量,有傳回值的時候,将傳回值指派給全局變量,通過全局變量擷取傳回值。
import time
from threading import Thread
a = None
def limit_decor(limit_time):
def functions(func):
# 執行操作
def run(*params):
thre_func = Thread(target=func, args=params)
# 主線程結束(超出時長),則線程方法結束
thre_func.setDaemon(True)
thre_func.start()
time.sleep(limit_time)
# 最終傳回值(不論線程是否已結束)
if a:
return a
else:
return '請求逾時'
return run
return functions
@limit_decor(2)
def run():
global a
print(111)
time.sleep(1)
a = 2222
return a
if __name__ == '__main__':
print(run())