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

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

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

正文

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

原始版本v0.0

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

def f():
    # do some connections
    return 0

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

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è)定重試次數(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ù)來設(shè)定需要捕獲哪些異常等。

tenacity版本

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

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)雅的重試的詳細(xì)內(nèi)容,更多關(guān)于Python優(yōu)雅重試的資料請關(guān)注腳本之家其它相關(guān)文章!

相關(guān)文章

  • python使用Turtle庫繪制動態(tài)鐘表

    python使用Turtle庫繪制動態(tài)鐘表

    這篇文章主要為大家詳細(xì)介紹了python使用Turtle庫繪制動態(tài)鐘表,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2018-11-11
  • Python基于回溯法解決01背包問題實例

    Python基于回溯法解決01背包問題實例

    這篇文章主要介紹了Python基于回溯法解決01背包問題,結(jié)合實例形式分析了Python回溯法采用深度優(yōu)先策略搜索解決01背包問題的相關(guān)操作技巧,需要的朋友可以參考下
    2017-12-12
  • Python 時間操作例子和時間格式化參數(shù)小結(jié)

    Python 時間操作例子和時間格式化參數(shù)小結(jié)

    這篇文章主要介紹了Python 時間操作例子,例如取前幾天、后幾天、前一月、后一月等,需要的朋友可以參考下
    2014-04-04
  • python項目對接釘釘SDK的實現(xiàn)

    python項目對接釘釘SDK的實現(xiàn)

    這篇文章主要介紹了python項目對接釘釘SDK的實現(xiàn),文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2019-07-07
  • PyYAML SafeLoader的使用小結(jié)

    PyYAML SafeLoader的使用小結(jié)

    yaml.SafeLoader 是處理配置文件的黃金標(biāo)準(zhǔn),它在保證安全的同時提供了完整的 YAML 功能支持,下面就來介紹一下PyYAML SafeLoader如何使用,感興趣的可以了解一下
    2026-03-03
  • python性能測量工具cProfile使用解析

    python性能測量工具cProfile使用解析

    這篇文章主要介紹了python性能測量工具cProfile使用解析,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友可以參考下
    2019-09-09
  • 零基礎(chǔ)帶你掌握Python Openpyxl單元格樣式修改指南

    零基礎(chǔ)帶你掌握Python Openpyxl單元格樣式修改指南

    在日常辦公中,我們經(jīng)常需要處理大量的 Excel 表格,本篇文章將系統(tǒng)地帶你走進 openpyxl 的樣式修改世界,無論你是編程小白還是有一定基礎(chǔ)的學(xué)習(xí)者,只要跟著本文的步驟,都能輕松讓你的自動化表格漂亮起來
    2026-03-03
  • Python如何實現(xiàn)動態(tài)數(shù)組

    Python如何實現(xiàn)動態(tài)數(shù)組

    這篇文章主要介紹了Python如何實現(xiàn)動態(tài)數(shù)組,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友可以參考下
    2019-11-11
  • 啥是佩奇?使用Python自動繪畫小豬佩奇的代碼實例

    啥是佩奇?使用Python自動繪畫小豬佩奇的代碼實例

    今天小編就為大家分享一篇關(guān)于啥是佩奇?使用Python自動繪畫小豬佩奇的代碼實例,小編覺得內(nèi)容挺不錯的,現(xiàn)在分享給大家,具有很好的參考價值,需要的朋友一起跟隨小編來看看吧
    2019-02-02
  • python 中的列表生成式、生成器表達式、模塊導(dǎo)入

    python 中的列表生成式、生成器表達式、模塊導(dǎo)入

    這篇文章主要介紹了python中的列表生成式、生成器表達式、模塊導(dǎo)入 ,本文通過實例代碼給大家介紹的非常詳細(xì),具有一定的參考借鑒價值,需要的朋友可以參考下
    2019-06-06

最新評論

航空| 高清| 新化县| 青铜峡市| 渭源县| 东阳市| 卢氏县| 丹寨县| 玉山县| 许昌县| 北碚区| 广安市| 闽清县| 苗栗市| 康马县| 鹿邑县| 平山县| 甘南县| 荥阳市| 兴和县| 亳州市| 蒲江县| 武平县| 兴国县| 余干县| 临沂市| 屏东县| 报价| 黄浦区| 沙坪坝区| 洛隆县| 泾阳县| 左贡县| 安塞县| 德州市| 洞头县| 沾化县| 平乐县| 北宁市| 乃东县| 衡山县|