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

一文詳解Python中的重試機(jī)制

 更新時間:2022年07月11日 09:32:05   作者:我愛Python數(shù)據(jù)挖掘  
本文將給大家介紹一個第三方庫-Tenacity(標(biāo)題中的重試機(jī)制并并不準(zhǔn)確,它不是 Python 的內(nèi)置模塊,因此并不能稱之為機(jī)制),它實現(xiàn)了幾乎我們可以使用到的所有重試場景,快跟隨小編一起學(xué)習(xí)一下吧

介紹

為了避免由于一些網(wǎng)絡(luò)或等其他不可控因素,而引起的功能性問題。比如在發(fā)送請求時,會因為網(wǎng)絡(luò)不穩(wěn)定,往往會有請求超時的問題。

這種情況下,我們通常會在代碼中加入重試的代碼。重試的代碼本身不難實現(xiàn),但如何寫得優(yōu)雅、易用,是我們要考慮的問題。

這里要給大家介紹的是一個第三方庫 - Tenacity (標(biāo)題中的重試機(jī)制并并不準(zhǔn)確,它不是 Python 的內(nèi)置模塊,因此并不能稱之為機(jī)制),它實現(xiàn)了幾乎我們可以使用到的所有重試場景,喜歡記得收藏、關(guān)注、點贊。

比如:

在什么情況下才進(jìn)行重試?

重試幾次呢?

重試多久后結(jié)束?

每次重試的間隔多長呢?

重試失敗后的回調(diào)?

在使用它之前 ,先要安裝它

$ pip install tenacity

1. 最基本的重試

無條件重試,重試之間無間隔

from tenacity import retry

@retry
def test_retry():
    print("等待重試,重試無間隔執(zhí)行...")
    raise Exception

test_retry()

無條件重試,但是在重試之前要等待 2 秒

from tenacity import retry, wait_fixed

@retry(wait=wait_fixed(2))
def test_retry():
    print("等待重試...")
    raise Exception

test_retry()

2. 設(shè)置停止基本條件

只重試7 次

from tenacity import retry, stop_after_attempt

@retry(stop=stop_after_attempt(7))
def test_retry():
    print("等待重試...")
    raise Exception

test_retry()

重試 10 秒后不再重試

from tenacity import retry, stop_after_delay

@retry(stop=stop_after_delay(10))
def test_retry():
    print("等待重試...")
    raise Exception

test_retry()

或者上面兩個條件滿足一個就結(jié)束重試

from tenacity import retry, stop_after_delay, stop_after_attempt

@retry(stop=(stop_after_delay(10) | stop_after_attempt(7)))
def test_retry():
    print("等待重試...")
    raise Exception

test_retry()

3. 設(shè)置何時進(jìn)行重試

在出現(xiàn)特定錯誤/異常(比如請求超時)的情況下,再進(jìn)行重試

from requests import exceptions
from tenacity import retry, retry_if_exception_type

@retry(retry=retry_if_exception_type(exceptions.Timeout))
def test_retry():
    print("等待重試...")
    raise exceptions.Timeout

test_retry()

在滿足自定義條件時,再進(jìn)行重試。

如下示例,當(dāng) test_retry 函數(shù)返回值為 False 時,再進(jìn)行重試

from tenacity import retry, stop_after_attempt, retry_if_result

def is_false(value):
    return value is False

@retry(stop=stop_after_attempt(3),
       retry=retry_if_result(is_false))
def test_retry():
    return False

test_retry()

4. 重試后錯誤重新拋出

當(dāng)出現(xiàn)異常后,tenacity 會進(jìn)行重試,若重試后還是失敗,默認(rèn)情況下,往上拋出的異常會變成 RetryError,而不是最根本的原因。

因此可以加一個參數(shù)(reraise=True),使得當(dāng)重試失敗后,往外拋出的異常還是原來的那個。

from tenacity import retry, stop_after_attempt

@retry(stop=stop_after_attempt(7), reraise=True)
def test_retry():
    print("等待重試...")
    raise Exception

test_retry()

5. 設(shè)置回調(diào)函數(shù)

當(dāng)最后一次重試失敗后,可以執(zhí)行一個回調(diào)函數(shù)

from tenacity import *

def return_last_value(retry_state):
    print("執(zhí)行回調(diào)函數(shù)")
    return retry_state.outcome.result()  # 表示返回原函數(shù)的返回值

def is_false(value):
    return value is False

@retry(stop=stop_after_attempt(3),
       retry_error_callback=return_last_value,
       retry=retry_if_result(is_false))
def test_retry():
    print("等待重試中...")
    return False

print(test_retry())

輸出如下

等待重試中...
等待重試中...
等待重試中...
執(zhí)行回調(diào)函數(shù)
False

到此這篇關(guān)于一文詳解Python中的重試機(jī)制的文章就介紹到這了,更多相關(guān)Python重試機(jī)制內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • 詳解python的四種內(nèi)置數(shù)據(jù)結(jié)構(gòu)

    詳解python的四種內(nèi)置數(shù)據(jù)結(jié)構(gòu)

    這篇文章主要介紹了python的四種內(nèi)置數(shù)據(jù)結(jié)構(gòu),文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2019-03-03
  • 在?Python?中如何將天數(shù)添加到日期

    在?Python?中如何將天數(shù)添加到日期

    這篇文章主要介紹了在?Python?中將天數(shù)添加到日期,本文給大家介紹的非常詳細(xì),對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2023-03-03
  • Python機(jī)器學(xué)習(xí)NLP自然語言處理基本操作之Seq2seq的用法

    Python機(jī)器學(xué)習(xí)NLP自然語言處理基本操作之Seq2seq的用法

    Seq2Seq模型是輸出的長度不確定時采用的模型,這種情況一般是在機(jī)器翻譯的任務(wù)中出現(xiàn),將一句中文翻譯成英文,那么這句英文的長度有可能會比中文短,也有可能會比中文長,所以輸出的長度就不確定了
    2021-10-10
  • 詳解Python讀取和寫入操作CSV文件的方法

    詳解Python讀取和寫入操作CSV文件的方法

    CSV 文件(逗號分隔值文件)是一種純文本文件,它使用特定的結(jié)構(gòu)來排列表格數(shù)據(jù)。本文將詳細(xì)介紹Python中讀取個寫入操作CSV文件的方法,需要的可以參考一下
    2022-03-03
  • 使用Python進(jìn)行二進(jìn)制文件讀寫的簡單方法(推薦)

    使用Python進(jìn)行二進(jìn)制文件讀寫的簡單方法(推薦)

    下面小編就為大家?guī)硪黄褂肞ython進(jìn)行二進(jìn)制文件讀寫的簡單方法(推薦)。小編覺得挺不錯的,現(xiàn)在就分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2016-09-09
  • Python matplotlib畫圖與中文設(shè)置操作實例分析

    Python matplotlib畫圖與中文設(shè)置操作實例分析

    這篇文章主要介紹了Python matplotlib畫圖與中文設(shè)置操作,結(jié)合實例形式分析了Python使用matplotlib進(jìn)行圖形繪制及中文設(shè)置相關(guān)操作技巧,需要的朋友可以參考下
    2019-04-04
  • Linux上安裝Python的PIL和Pillow庫處理圖片的實例教程

    Linux上安裝Python的PIL和Pillow庫處理圖片的實例教程

    這里我們來看一下在Linux上安裝Python的PIL和Pillow庫處理圖片的實例教程,包括一個使用Pillow庫實現(xiàn)批量轉(zhuǎn)換圖片的例子:
    2016-06-06
  • python文件排序的方法總結(jié)

    python文件排序的方法總結(jié)

    在本篇內(nèi)容里小編給各位整理的是一篇關(guān)于python文件排序的方法總結(jié),有需要的朋友們可以參考下。
    2020-09-09
  • python實現(xiàn)發(fā)送和獲取手機(jī)短信驗證碼

    python實現(xiàn)發(fā)送和獲取手機(jī)短信驗證碼

    這篇文章主要介紹了python實現(xiàn)發(fā)送和獲取手機(jī)短信驗證碼的相關(guān)資料,講解了python如何解決接口測試獲取手機(jī)驗證碼問題,感興趣的小伙伴們可以參考一下
    2016-01-01
  • Python3內(nèi)置模塊pprint讓打印比print更美觀詳解

    Python3內(nèi)置模塊pprint讓打印比print更美觀詳解

    這篇文章主要給大家介紹了關(guān)于Python3內(nèi)置模塊pprint讓打印比print更美觀的相關(guān)資料,文中通過示例代碼介紹的非常詳細(xì),對大家學(xué)習(xí)或者使用Python3具有一定的參考學(xué)習(xí)價值,需要的朋友們下面來一起學(xué)習(xí)學(xué)習(xí)吧
    2019-06-06

最新評論

四平市| 丹巴县| 伊宁县| 南乐县| 临洮县| 宜兰县| 凤山市| 湄潭县| 明水县| 德惠市| 台湾省| 东海县| 大安市| 土默特右旗| 武威市| 桑日县| 福贡县| 双桥区| 梁平县| 玉林市| 连平县| 长垣县| 来安县| 易门县| 北海市| 根河市| 始兴县| 门源| 巧家县| 泸溪县| 盐山县| 米林县| 鄂州市| 汉阴县| 广丰县| 南皮县| 永州市| 长武县| 青冈县| 仁化县| 清镇市|