python包實現?retrying?重復回調操作
更新時間:2022年04月19日 17:32:05 作者:autofelix?
這篇文章主要介紹了python包實現?retrying?重復回調操作,文章python的相關資料展開對retrying?重復回調的詳細介紹,需要的小伙伴可以參考一下,希望對你的學習有所幫助
一、安裝
- 循環(huán)、重復回調我們在很多場景中會用到
- 不僅在支付場景中,我們需要通過反復的回調知道用戶的支付狀態(tài)
- 還有在請求中,如果請求失敗,我們需要再重新進行進行請求,防止請求異常導致數據缺失
pip install retrying
二、一直請求
- 假如我們希望在代碼碰到異常時,一直回調,直到成功
- 下面方法中,我們直接訪問一個未定義的變量,肯定會走下面的Exception中
- 這個時候我們可以將這一次錯誤寫進日志,但是讓程序繼續(xù)執(zhí)行這個方法,直到沒有異常為止
- 因為這里模擬的是肯定有異常,所以該程序會一直返回回調,不間斷的循環(huán)往復
from retrying import retry @retry() def say(): try: autofelix except Exception as e: # 可以將錯誤記錄日志 print(e) raise say()
三、設置最大運行次數
- 如果我們在請求中遇到異常時候
- 可以通過 stop_max_attempt_number 設置一個最大運行次數
- 當回調次數超過設置值,將不再執(zhí)行回調
- 這里我們設置最大運行次數為5次
from retrying import retry @retry(stop_max_attempt_number=5) def say(): try: autofelix except Exception as e: # 可以將錯誤記錄日志 print(e) raise say()
四、設置重試的最大時間
- 可以通過
stop_max_delay
設置失敗重試的最大時間, 單位毫秒 - 超出時間,則停止重試
from retrying import retry @retry(stop_max_delay=1000) def say(): try: autofelix except Exception as e: # 可以將錯誤記錄日志 print(e) raise say()
五、設置間隔時間
- 設置失敗重試的間隔時間, 單位毫秒
- 降低回調頻率
from retrying import retry @retry(wait_fixed=1000) def say(): try: autofelix except Exception as e: # 可以將錯誤記錄日志 print(e) raise say()
六、設置隨機間隔時間
- 設置失敗重試隨機性間隔時間, 單位毫秒
- 可以使得訪問頻率不均勻
from retrying import retry @retry(wait_random_min=5000, wait_random_max=50000) def say(): try: autofelix except Exception as e: # 可以將錯誤記錄日志 print(e) raise say()
七、隨機倍數間隔時間
- 可以通過設置
wait_exponential_multiplier
間隔時間倍數增加 - 可以通過設置
wait_exponential_max
最大間隔時間
from retrying import retry @retry(wait_exponential_multiplier=1000, wait_exponential_max=10000) def say(): try: autofelix except Exception as e: # 可以將錯誤記錄日志 print(e) raise say()
八、指定異常類型
- 可以通過
retry_on_exception
設置指定異常類型 - 指定的異常類型會重試,不指定的類型,會直接異常退出
- 如果設置
wrap_exception
參數為True
,則其他類型異常
from retrying import retry def retry_error(exception): return isinstance(exception, RetryError) # 會重復調用 @retry(etry_on_exception=retry_error) def say(): try: autofelix except RetryError as e: raise RetryError # 只調用一次 @retry(etry_on_exception=retry_error, wrap_exception=True) def say(): raise Exception('a') say()
九、過濾回調
- 可以設置
retry_on_result
指定哪些結果需要去回調 - 將請求結果放到
retry_on_result
指定方法中進行過濾,如果返回None,則繼續(xù)回調,否則就結束
from retrying import retry def retry_filter(result): print("this is result") return result is not None @retry(retry_on_result=retry_filter) def say(): print('Retry forever ignoring Exceptions with no wait if return value is None') return None say()
十、異常執(zhí)行
- 通過設置
stop_func
每次拋出異常時都會執(zhí)行的函數 - 如果和
stop_max_delay
、stop_max_attempt_number
配合使用,則后兩者會失效
from retrying import retry def stop_record(attempts, delay): print("logging %d--->%d" % (attempts,delay)) @retry(stop_max_delay=10, stop_func=stop_record) def say(): print("i am autofelix") raise Exception say()
到此這篇關于python 包之 retrying 重復回調的文章就介紹到這了,更多相關python retrying 內容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關文章希望大家以后多多支持腳本之家!
相關文章
Python Django簡單實現session登錄注銷過程詳解
這篇文章主要介紹了Python Django簡單實現session登錄注銷過程詳解,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友可以參考下2019-08-08詳解Python3 中hasattr()、getattr()、setattr()、delattr()函數及示例代碼數
本文通過示例代碼給大家詳細介紹了Python3 中hasattr()、getattr()、setattr()、delattr()函數,非常不錯,具有參考借鑒價值,需要的朋友參考下吧2018-04-04