91超碰碰碰碰久久久久久综合_超碰av人澡人澡人澡人澡人掠_国产黄大片在线观看画质优化_txt小说免费全本

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

使用python怎么實現一個重試裝飾器

發布時間:2021-04-20 17:28:34 來源:億速云 閱讀:281 作者:Leah 欄目:開發技術

今天就跟大家聊聊有關使用python怎么實現一個重試裝飾器,可能很多人都不太了解,為了讓大家更加了解,小編給大家總結了以下內容,希望大家根據這篇文章可以有所收獲。

python是什么意思

Python是一種跨平臺的、具有解釋性、編譯性、互動性和面向對象的腳本語言,其最初的設計是用于編寫自動化腳本,隨著版本的不斷更新和新功能的添加,常用于用于開發獨立的項目和大型項目。

import time
from functools import wraps

__author__ = 'blackmatrix'


"""
在函數執行出現異常時自動重試的簡單裝飾器
"""


class StopRetry(Exception):

 def __repr__(self):
  return 'retry stop'


def retry(max_retries: int =5, delay: (int, float) =0, step: (int, float) =0,
   exceptions: (BaseException, tuple, list) =BaseException,
   sleep=time.sleep, callback=None, validate=None):
 """
 函數執行出現異常時自動重試的簡單裝飾器。
 :param max_retries: 最多重試次數。
 :param delay: 每次重試的延遲,單位秒。
 :param step: 每次重試后延遲遞增,單位秒。
 :param exceptions: 觸發重試的異常類型,單個異常直接傳入異常類型,多個異常以tuple或list傳入。
 :param sleep: 實現延遲的方法,默認為time.sleep。
 在一些異步框架,如tornado中,使用time.sleep會導致阻塞,可以傳入自定義的方法來實現延遲。
 自定義方法函數簽名應與time.sleep相同,接收一個參數,為延遲執行的時間。
 :param callback: 回調函數,函數簽名應接收一個參數,每次出現異常時,會將異常對象傳入。
 可用于記錄異常日志,中斷重試等。
 如回調函數正常執行,并返回True,則表示告知重試裝飾器異常已經處理,重試裝飾器終止重試,并且不會拋出任何異常。
 如回調函數正常執行,沒有返回值或返回除True以外的結果,則繼續重試。
 如回調函數拋出異常,則終止重試,并將回調函數的異常拋出。
 :param validate: 驗證函數,用于驗證執行結果,并確認是否繼續重試。
 函數簽名應接收一個參數,每次被裝飾的函數完成且未拋出任何異常時,調用驗證函數,將執行的結果傳入。
 如驗證函數正常執行,且返回False,則繼續重試,即使被裝飾的函數完成且未拋出任何異常。
 如回調函數正常執行,沒有返回值或返回除False以外的結果,則終止重試,并將函數執行結果返回。
 如驗證函數拋出異常,且異常屬于被重試裝飾器捕獲的類型,則繼續重試。
 如驗證函數拋出異常,且異常不屬于被重試裝飾器捕獲的類型,則將驗證函數的異常拋出。
 :return: 被裝飾函數的執行結果。
 """
 def wrapper(func):
  @wraps(func)
  def _wrapper(*args, **kwargs):
   nonlocal delay, step, max_retries
   func_ex = StopRetry
   while max_retries > 0:
    try:
     result = func(*args, **kwargs)
     # 驗證函數返回False時,表示告知裝飾器驗證不通過,繼續重試
     if callable(validate) and validate(result) is False:
      continue
     else:
      return result
    except exceptions as ex:
     # 回調函數返回True時,表示告知裝飾器異常已經處理,終止重試
     if callable(callback) and callback(ex) is True:
      return
     func_ex = ex
    finally:
     max_retries -= 1
     if delay > 0 or step > 0:
      sleep(delay)
      delay += step
   else:
    raise func_ex
  return _wrapper
 return wrapper


if __name__ == '__main__':
 pass

看完上述內容,你們對使用python怎么實現一個重試裝飾器有進一步的了解嗎?如果還想了解更多知識或者相關內容,請關注億速云行業資訊頻道,感謝大家的支持。

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

浦江县| 福贡县| 深圳市| 新沂市| 宝兴县| 壤塘县| 庆云县| 固镇县| 陵川县| 普兰县| 宽城| 博爱县| 广平县| 安丘市| 扎兰屯市| 扶余县| 苍梧县| 泾阳县| 海城市| 东明县| 余庆县| 青川县| 尼玛县| 定兴县| 克东县| 临漳县| 盐山县| 白水县| 高州市| 旌德县| 克拉玛依市| 区。| 衡山县| 大连市| 习水县| 马鞍山市| 香河县| 益阳市| 山阳县| 溧水县| 海口市|