1. 程式人生 > 實用技巧 >python3函式重試機制retry

python3函式重試機制retry

背景:

在做介面測試的時候,可能會遇到由於網路問題導致的程式報錯,這個時候需要進行重試了

安裝第三方庫:

pip install retrying

案例:

#!/usr/bin/env python 
# -*- coding:utf-8 -*-
import random
from retrying import retry
'''
retry引數說明:
retry(wait_fixed = 1000)    #設定重試間隔時長(ms  1000ms = 1s)
retry(wait_random_min = 1000,wait_random_max = 2000,)    #隨機重試間隔,將在1~2s內
retry(stop_max_attempt_number = 3)        #最大重試次數,超過後正常丟擲異常
retry(stop_max_delay = 2000)            #最大延遲時長,2s內未滿足條件則丟擲異常
retry(retry_on_exception = 自定義函式)        #當發生指定異常時會執行函式
retry(retry_on_result=自定義函式)  #每次都會執行函式,當返回返回True就重試,否則異常退出    

''' chenwei='我是全域性' ##____________________1、生成大於4的數字_____________________________________________________ #如果重試3次還沒有4則報異常 @retry(stop_max_attempt_number=3)#最大重試次數,超過後正常丟擲異常 def do_something_unreliable(): aa=random.randint(0, 10)#隨機數 if aa > 4: #print('本輪隨機數:',aa) raise IOError("
生成資料數超過指定次數!引發異常") else: return "Awesome sauce!" print(do_something_unreliable()) #________________________2、生成隨機數為1的數字____________________________________________ @retry()#不加引數就無限重試 def pick_one(): t = random.randint(0, 100) print('隨機數為:',t) if t != 1: raise Exception('
1 is not picked') pick_one() # 隨機數不等於1則一直重試,等於1則停止 ##______________________________3、每次丟擲異常時都會執行的函式________________________________ def stop_fun(attempts, delay): print('你好=',chenwei) #print("stop_func %d--->%d" % (attempts,delay)) @retry(stop_max_attempt_number = 5,stop_func = stop_fun) def pick_one(): t = random.randint(0, 10) print('隨機數為:',t) if t != 1: raise Exception('1 is not picked') pick_one() ##__________________4、指定一個函式,如果指定的函式返回True,就重試,否則退出__________________ ##通過函式返回值確定是否重試 def run2(r):#r就是a的值 #return isinstance(r, int)#判斷r是否為int型別 print('r的值為:',r) if r <80: return True else: return False @retry(retry_on_result=run2) def run(): print("開始重試") t = random.randint(0, 100) print(t) return t run() ##____________________________請求相應包含'請稍後重試'就重試_____________________________________ import requests # @retry(stop_max_attempt_number=3, stop_max_delay=1000) # def test3(): # r = requests.get('http://url', {'xx': 'xx'}) # 如果這裡出現異常了,比如說超時,他就會自動重試 # if '請稍後重試' in r.text: # # 自己判斷什麼時候重試,比如說服務端返回某個資訊,就主動丟擲一個異常,這樣它就會自動重試 # raise Exception('服務端現在有點問題') # test3() #