有參數重試
(1)stop_max_attempt_number
在retry中傳入stop_max_attempt_number參數后可以指定失敗重試的次數
@retry(stop_max_attempt_number=2)
def func():
print(f"記錄失敗重試")
for item in range(0,100):
result=item / 0
print(result)
return result
func()
因為這里我們指定了失敗后進行兩次重試,如果重試執行兩次后還是報錯則結束重試,將錯誤信息拋出來。
**(2)wait_fixed
**傳入wati_fixed后,可以指定重試的時間
from retrying import retry
import time
# 設置三秒重試一次
@retry(wait_fixed=3000)
def func():
print(f"記錄失敗重試:",time.strftime("%Y-%m-%d %H:%M:%S"))
result=1 / 0
print(result)
return result
func()
配置重試間隔時間后,成語遇到執行失敗或者報錯后,就會根據設置的重試時間去進行重試執行
(3)wait_random_min
和wait_random_max
通常wait_random_min和wait_random_max是一起搭配使用的,可以設置一個重試等待的時間,然后會在設置的時間區間內隨機取一個等待時間進行重試
from retrying import retry
import time
@retry(wait_random_min=1000,wait_random_max=9000)
def func():
print(f"記錄失敗重試:",time.strftime("%Y-%m-%d %H:%M:%S"))
result=1 / 0
print(result)
return result
func()
(4)wait_exponential_multiplier
和wait_exponential_max
官方解釋為:以指數的形式產生兩次retrying之間的停留時間, 產生的值為2^previous_attempt_number * wait_exponential_multiplier, previous_attempt_number是前面已經retry的次數, 如果產生的這個值超過了wait_exponential_max的大小, 那么之后兩個retrying之間的停留值都為wait_exponential_max
通俗來點講就是每次重試的時間以wait_exponential_multiplier設置的值2,如果重試后還是失敗則繼續2,直到最后的值等于或則超過wait_exponential_max設置的值后,后面的每一次重試等待時間都是wait_exponential_max設置的值
from retrying import retry
import time
@retry(wait_exponential_multiplier=1000,wait_exponential_max=10000)
def func():
print(f"記錄失敗重試:",time.strftime("%Y-%m-%d %H:%M:%S"))
result=1 / 0
print(result)
return result
func()
(5)wait_func
在前面介紹的參數都是如何配置失敗沖重試的等待時間或者重試次數之類的,但是我們不能時時刻刻盯著程序,在程序代碼發生錯誤時我們應該要進行發送短信或者郵件之類的提醒才行
在這里就可以使用到wait_func參數,它接收一個可執行函數,返回一個具體的間隔時間數值,單位ms。接收的函數須接收兩個參數:attempt_number當前運行次數,delay_since_first_attempt_ms當前重試機制運行時間(單位ms)
from retrying import retry
import time
def func_demo(attempt_number,delay_since_first_attempt_ms):
print("函數運行失敗后運行該函數")
if attempt_number == 5:
print("已經重試失敗五次了,開始準備發送提醒")
if attempt_number == 10:
print("已經重試失敗超10次了,發送郵件給相關人員緊急處理")
if attempt_number >10:
print("重試時間過長,做一些其他臨時方案進行補救")
# return一個重試的時間
return 2000
@retry(wait_func=func_demo)
def func():
print(f"記錄失敗重試:",time.strftime("%Y-%m-%d %H:%M:%S"))
result=1 / 0
return result
func()
使用wait_func通過調用其他可執行的函數,我們可以借助它來做一些臨時的補救措施,避免程序一直無法運行而產生的影響。
(6)其他參數
在retry中還存在有很多參數,有興趣的小伙伴可以去詳細了解下
stop_max_attempt_number
:在停止之前嘗試的最大次數,最后一次如果還是有異常則會拋出異常,停止運行,默認為5次stop_max_delay
:最大延遲時間,大概意思就是:如果調用的函數出現異常,那么就會重復調用這個函數,最大調用時間,默認為100毫秒wait_fixed
:兩次調用方法期間停留時長, 如果出現異常則會一直重復調用,默認 1000毫秒wait_random_min
:在兩次調用方法停留時長,停留最短時間,默認為0wait_random_max
:在兩次調用方法停留時長,停留最長時間,默認為1000毫秒wait_incrementing_increment
:每調用一次則會增加的時長,默認 100毫秒wait_exponential_multiplier
和wait_exponential_max
:以指數的形式產生兩次「retrying」之間的停留時間,產生的值為2^previous_attempt_number * wait_exponential_multiplier,previous_attempt_number是前面已經「retry」的次數,如果產生的這個值超過了wait_exponential_max的大小,那么之后兩個「retrying」之間的停留值都為wait_exponential_maxretry_on_exception
: 指定一個函數,如果此函數返回指定異常,則會重試,如果不是指定的異常則會退出retry_on_result
:指定一個函數,如果指定的函數返回True,則重試,否則拋出異常退出wrap_exception
:參數設置為True/False,如果指定的異常類型,包裹在RetryError中,會看到RetryError和程序拋的Exception errorstop_func
: 每次拋出異常時都會執行的函數,如果和stop_max_delay、stop_max_attempt_number配合使用,則后兩者會失效 (指定的stop_func會有兩個參數:attempts, delay)wait_func
:和stop_func用法差不多。
-
數據庫
+關注
關注
7文章
3794瀏覽量
64362 -
函數
+關注
關注
3文章
4327瀏覽量
62574 -
python
+關注
關注
56文章
4792瀏覽量
84631
發布評論請先 登錄
相關推薦
評論