欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

詳解Python如何優(yōu)雅的重試

 更新時間:2023年07月21日 14:17:50   作者:Harpsichord1207  
這篇文章主要為大家介紹了Python如何優(yōu)雅的重試詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪

正文

在編碼中,一些涉及網(wǎng)絡連接的代碼片段經(jīng)常需要重試,本文講解了如何一步一步實現(xiàn)一個優(yōu)雅的retry裝飾器以及tenacity庫的使用。

原始版本v0.0

假如有一個函數(shù)形式如下,函數(shù)有一些建立網(wǎng)絡連接的邏輯

def f():
    # do some connections
    return 0

為了避免偶爾的網(wǎng)絡連接失敗,需要加上重試機制,那么最簡單的形式就是在對應的代碼片段加一個循環(huán),循環(huán)體里使用異常捕獲,連接成功時退出循環(huán),否則就重復執(zhí)行相關邏輯,此時修改之后的函數(shù)f如下

def f():
    while 1:
        try:
            # do some connections
            break
        except ConnectionError:
            continue
    return 0

裝飾器版本v1.0

可以使用裝飾器對代碼進行抽象。例如現(xiàn)在有兩個函數(shù)f1f2需要加上重試機制,寫一個名為retry的裝飾器函數(shù),用其裝飾f1f2即可。這樣做避免了對老代碼的修改,同時也實現(xiàn)了代碼復用。示例如下

def retry(f):
    def wrap(*args, **kwargs):
        while 1:
            try:
                return f(*args, **kwargs)
            except ConnectionError:
                continue
    return wrap

@retry
def f1():
    # do some connections
    return 0

@retry
def f2():
    # do some other connections
    return 0

帶參數(shù)的裝飾器版本v1.1

v1.0的版本retry裝飾器還有一些問題,假如有的函數(shù)想重試3次,有的想重試5次,重試的間隔也根據(jù)不同函數(shù)不一樣,v1.0是無法實現(xiàn)的。此時可以借助帶參數(shù)的三層裝飾器,例如以下代碼實現(xiàn)的retry裝飾器,可以傳入timesinterval兩個參數(shù)來設定重試次數(shù)和重試間隔

def retry(times, interval):
    def decorator(f)
        def wrap(*args, **kwargs):
            while times:
                try:
                    return f(*args, **kwargs)
                except ConnectionError:
                    times -= 1
                    time.sleep(interval)
                    continue
        return wrap
    return decorator

# 重試3次每次間隔10秒
@retry(times=3, interval=10)
def f1():
    # do some connections
    return 0

# 重試5次每次間隔15秒
@retry(times=5, interval=15)
def f2():
    # do some other connections
    return 0

裝飾器支持參數(shù)之后,可以根據(jù)需要定義更豐富的參數(shù),比如通過參數(shù)來設定需要捕獲哪些異常等。

tenacity版本

tenacity是一個第三方開源庫,用于函數(shù)的重試,實際上它的功能與原理是上面自己寫的代碼類似的!只是它可定義的參數(shù)更豐富,如果不想重復造輪子,拿來直接用就可以。代碼示例如下

from tenacity import retry, stop_after_attempt, wait_fixed

# 不帶任何參數(shù)的重試
@retry
def f():
    # do some connections
    return 0

# 重試5次每次間隔15秒
@retry(stop=stop_after_attempt(5), wait=wait_fixed(15))
def f():
    # do some connections
    return 0

以上就是詳解Python如何優(yōu)雅的重試的詳細內容,更多關于Python優(yōu)雅重試的資料請關注腳本之家其它相關文章!

相關文章

  • Python對list列表進行去重的幾種方法

    Python對list列表進行去重的幾種方法

    python?列表就是我們js中的數(shù)組了,我們下文整理幾個常用的python?列表去重實現(xiàn)方法,非常的簡單好用,通過代碼示例講解的非常詳細,具有一定的參考價值,需要的朋友可以參考下
    2024-10-10
  • python如何實現(xiàn)圖片轉文字

    python如何實現(xiàn)圖片轉文字

    這篇文章主要介紹了python如何實現(xiàn)圖片轉文字問題,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2023-03-03
  • python微信跳一跳系列之棋子定位像素遍歷

    python微信跳一跳系列之棋子定位像素遍歷

    這篇文章主要為大家詳細介紹了python微信跳一跳系列之棋子定位之像素遍歷,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2018-02-02
  • 人工智能學習PyTorch實現(xiàn)CNN卷積層及nn.Module類示例分析

    人工智能學習PyTorch實現(xiàn)CNN卷積層及nn.Module類示例分析

    這篇文章主要為大家介紹了人工智能學習PyTorch實現(xiàn)CNN卷積層及nn.Module類示例分析,有需要的朋友可以借鑒參考下,希望能夠有所幫助
    2021-11-11
  • 詳解將Pandas中的DataFrame類型轉換成Numpy中array類型的三種方法

    詳解將Pandas中的DataFrame類型轉換成Numpy中array類型的三種方法

    這篇文章主要介紹了詳解將Pandas中的DataFrame類型轉換成Numpy中array類型的三種方法,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2019-07-07
  • python最常用的三種輸出格式解讀

    python最常用的三種輸出格式解讀

    這篇文章主要介紹了python最常用的三種輸出格式,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教
    2024-02-02
  • Python Excel處理庫openpyxl詳解

    Python Excel處理庫openpyxl詳解

    這篇文章主要介紹了Python Excel處理庫openpyxl詳解,需要的朋友可以參考下
    2021-05-05
  • 如何利用Python實現(xiàn)簡單C++程序范圍分析

    如何利用Python實現(xiàn)簡單C++程序范圍分析

    這篇文章主要介紹了如何利用Python實現(xiàn)簡單C++程序范圍分析,文章以舉例說明及過程實現(xiàn)思路的方式展開講解,具有一定的的參考價值,需要的小伙伴可以參考一下,希望對你有所幫助
    2022-02-02
  • Python3.8中使用f-strings調試

    Python3.8中使用f-strings調試

    這篇文章主要介紹了Python3.8中使用f-strings調試的相關知識,本文通過實例代碼給大家介紹的非常詳細,具有一定的參考借鑒價值,需要的朋友可以參考下
    2019-05-05
  • Python實現(xiàn)二叉堆

    Python實現(xiàn)二叉堆

    二叉堆是一種特殊的堆,二叉堆是完全二元樹(二叉樹)或者是近似完全二元樹(二叉樹)。二叉堆有兩種:最大堆和最小堆。最大堆:父結點的鍵值總是大于或等于任何一個子節(jié)點的鍵值;最小堆:父結點的鍵值總是小于或等于任何一個子節(jié)點的鍵值。
    2016-02-02

最新評論