最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

python重試裝飾器的簡單實現(xiàn)方法

 更新時間:2019年01月31日 09:37:47   作者:BlackMatrix  
今天小編就為大家分享一篇python重試裝飾器的簡單實現(xiàn)方法,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧

簡單實現(xiàn)了一個在函數(shù)執(zhí)行出現(xiàn)異常時自動重試的裝飾器,支持控制最多重試次數(shù),每次重試間隔,每次重試間隔時間遞增。

最新的代碼可以訪問從github上獲取

https://github.com/blackmatrix7/matrix-toolkit/blob/master/toolkit/retry.py

#!/usr/bin/env python
# -*- coding: utf-8 -*-
# @Time : 2017/8/18 上午9:50
# @Author : Matrix
# @Github : https://github.com/blackmatrix7/
# @Blog : http://www.cnblogs.com/blackmatrix/
# @File : retry.py
# @Software: PyCharm
import time
from functools import wraps

__author__ = 'blackmatrix'


"""
在函數(shù)執(zhí)行出現(xiàn)異常時自動重試的簡單裝飾器
"""


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):
 """
 函數(shù)執(zhí)行出現(xiàn)異常時自動重試的簡單裝飾器。
 :param max_retries: 最多重試次數(shù)。
 :param delay: 每次重試的延遲,單位秒。
 :param step: 每次重試后延遲遞增,單位秒。
 :param exceptions: 觸發(fā)重試的異常類型,單個異常直接傳入異常類型,多個異常以tuple或list傳入。
 :param sleep: 實現(xiàn)延遲的方法,默認為time.sleep。
 在一些異步框架,如tornado中,使用time.sleep會導致阻塞,可以傳入自定義的方法來實現(xiàn)延遲。
 自定義方法函數(shù)簽名應與time.sleep相同,接收一個參數(shù),為延遲執(zhí)行的時間。
 :param callback: 回調(diào)函數(shù),函數(shù)簽名應接收一個參數(shù),每次出現(xiàn)異常時,會將異常對象傳入。
 可用于記錄異常日志,中斷重試等。
 如回調(diào)函數(shù)正常執(zhí)行,并返回True,則表示告知重試裝飾器異常已經(jīng)處理,重試裝飾器終止重試,并且不會拋出任何異常。
 如回調(diào)函數(shù)正常執(zhí)行,沒有返回值或返回除True以外的結(jié)果,則繼續(xù)重試。
 如回調(diào)函數(shù)拋出異常,則終止重試,并將回調(diào)函數(shù)的異常拋出。
 :param validate: 驗證函數(shù),用于驗證執(zhí)行結(jié)果,并確認是否繼續(xù)重試。
 函數(shù)簽名應接收一個參數(shù),每次被裝飾的函數(shù)完成且未拋出任何異常時,調(diào)用驗證函數(shù),將執(zhí)行的結(jié)果傳入。
 如驗證函數(shù)正常執(zhí)行,且返回False,則繼續(xù)重試,即使被裝飾的函數(shù)完成且未拋出任何異常。
 如回調(diào)函數(shù)正常執(zhí)行,沒有返回值或返回除False以外的結(jié)果,則終止重試,并將函數(shù)執(zhí)行結(jié)果返回。
 如驗證函數(shù)拋出異常,且異常屬于被重試裝飾器捕獲的類型,則繼續(xù)重試。
 如驗證函數(shù)拋出異常,且異常不屬于被重試裝飾器捕獲的類型,則將驗證函數(shù)的異常拋出。
 :return: 被裝飾函數(shù)的執(zhí)行結(jié)果。
 """
 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)
     # 驗證函數(shù)返回False時,表示告知裝飾器驗證不通過,繼續(xù)重試
     if callable(validate) and validate(result) is False:
      continue
     else:
      return result
    except exceptions as ex:
     # 回調(diào)函數(shù)返回True時,表示告知裝飾器異常已經(jīng)處理,終止重試
     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重試裝飾器的簡單實現(xiàn)方法就是小編分享給大家的全部內(nèi)容了,希望能給大家一個參考,也希望大家多多支持腳本之家。

相關(guān)文章

  • 手把手帶你了解python多進程,多線程

    手把手帶你了解python多進程,多線程

    這篇文章主要介紹了python多線程與多進程及其區(qū)別詳解,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友可以參考下
    2021-08-08
  • python 爬取國內(nèi)小說網(wǎng)站

    python 爬取國內(nèi)小說網(wǎng)站

    國內(nèi)小說網(wǎng)站的結(jié)構(gòu),大概都如出一轍,改改地址,就差不多了,有此需求的朋友可以參考下本文的爬蟲寫法
    2021-06-06
  • Python中Celery異步任務隊列的具體使用

    Python中Celery異步任務隊列的具體使用

    Celery是一個用于處理分布式任務和作業(yè)隊列的異步任務隊列庫,本文主要介紹了Python中Celery異步任務隊列的具體使用,文中通過示例代碼介紹的非常詳細,需要的朋友們下面隨著小編來一起學習學習吧
    2024-02-02
  • 用python畫個敬業(yè)福字代碼

    用python畫個敬業(yè)福字代碼

    大家好,本篇文章主要講的是用python畫個敬業(yè)福字代碼,感興趣的同學趕快來看一看吧,對你有幫助的話記得收藏一下
    2022-01-01
  • python3從網(wǎng)絡攝像機解析mjpeg http流的示例

    python3從網(wǎng)絡攝像機解析mjpeg http流的示例

    這篇文章主要介紹了python3從網(wǎng)絡攝像機解析mjpeg http流的示例,幫助大家更好的理解和使用python,感興趣的朋友可以了解下
    2020-11-11
  • python 分割符豎線的具體實現(xiàn)

    python 分割符豎線的具體實現(xiàn)

    豎線作為一種常見的分割符,能夠?qū)⒁恍形谋净驍?shù)據(jù)按照指定規(guī)則分割為多個部分,本文主要介紹了python 分割符豎線的具體實現(xiàn),具有一定的參考價值,感興趣的可以了解一下
    2024-01-01
  • 用Q-learning算法實現(xiàn)自動走迷宮機器人的方法示例

    用Q-learning算法實現(xiàn)自動走迷宮機器人的方法示例

    這篇文章主要介紹了用Q-learning算法實現(xiàn)自動走迷宮機器人的方法示例,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2019-06-06
  • 如何利用Python實現(xiàn)簡易的音頻播放器

    如何利用Python實現(xiàn)簡易的音頻播放器

    這篇文章主要介紹了如何利用Python實現(xiàn)簡易的音頻播放器,需要用到的庫有pygame和tkinter,實現(xiàn)音頻播放的功能,供大家學習參考,希望對你有所幫助
    2022-03-03
  • python使用UDP實現(xiàn)客戶端和服務器對話

    python使用UDP實現(xiàn)客戶端和服務器對話

    這篇文章主要為大家介紹了python使用UDP實現(xiàn)客戶端和服務器對話示例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪
    2023-03-03
  • python自動識別文本編碼格式代碼

    python自動識別文本編碼格式代碼

    今天小編就為大家分享一篇python自動識別文本編碼格式代碼,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2019-12-12

最新評論

塔河县| 秦安县| 电白县| 顺义区| 武强县| 深泽县| 尚志市| 海南省| 溧阳市| 于都县| 开原市| 乌兰浩特市| 田东县| 盐池县| 当涂县| 龙海市| 淅川县| 滨州市| 华亭县| 中宁县| 固镇县| 麟游县| 东阿县| 苗栗县| 泰州市| 罗源县| 独山县| 晋州市| 乐山市| 财经| 大丰市| 溧水县| 蓬莱市| 灵山县| 镇康县| 中超| 华池县| 鸡泽县| 榆社县| 和政县| 龙山县|