色哟哟视频在线观看-色哟哟视频在线-色哟哟欧美15最新在线-色哟哟免费在线观看-国产l精品国产亚洲区在线观看-国产l精品国产亚洲区久久

0
  • 聊天消息
  • 系統(tǒng)消息
  • 評(píng)論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學(xué)習(xí)在線課程
  • 觀看技術(shù)視頻
  • 寫文章/發(fā)帖/加入社區(qū)
會(huì)員中心
創(chuàng)作中心

完善資料讓更多小伙伴認(rèn)識(shí)你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

Tenacity重試模塊實(shí)踐

科技綠洲 ? 來源:Python實(shí)用寶典 ? 作者:Python實(shí)用寶典 ? 2023-11-02 11:33 ? 次閱讀

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

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

這里要給大家介紹的是一個(gè)第三方庫 - Tenacity ,它實(shí)現(xiàn)了幾乎我們可以使用到的所有重試場(chǎng)景,比如:

  1. 在什么情況下才進(jìn)行重試?
  2. 重試幾次呢?
  3. 重試多久后結(jié)束?
  4. 每次重試的間隔多長呢?
  5. 重試失敗后的回調(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()

或者上面兩個(gè)條件滿足一個(gè)就結(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è)置何時(shí)進(jìn)行重試

在出現(xiàn)特定錯(cuò)誤/異常(比如請(qǐng)求超時(shí))的情況下,再進(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()

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

如下示例,當(dāng) test_retry 函數(shù)返回值為 False 時(shí),再進(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. 重試后錯(cuò)誤重新拋出

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

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

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í)行一個(gè)回調(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
聲明:本文內(nèi)容及配圖由入駐作者撰寫或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點(diǎn)僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場(chǎng)。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問題,請(qǐng)聯(lián)系本站處理。 舉報(bào)投訴
  • 模塊
    +關(guān)注

    關(guān)注

    7

    文章

    2731

    瀏覽量

    47662
  • 參數(shù)
    +關(guān)注

    關(guān)注

    11

    文章

    1859

    瀏覽量

    32383
  • 代碼
    +關(guān)注

    關(guān)注

    30

    文章

    4823

    瀏覽量

    68902
收藏 人收藏

    評(píng)論

    相關(guān)推薦

    自動(dòng)延遲重試的簡(jiǎn)單能量跳閘斷路器設(shè)計(jì)

    DN495- 具有自動(dòng)延遲重試的簡(jiǎn)單能量跳閘斷路器
    發(fā)表于 04-30 17:21

    wifi (STA) 最大重試次數(shù)是多少?

    您好,目前 STA 應(yīng)用程序一直在嘗試連接到接入點(diǎn)。我需要限制重試次數(shù)。這個(gè)限制是可配置的嗎?萬一,怎么辦?“esp_wifi_connect()”是否不斷重試并生成事件“WIFI_EVENT_STA_DISCONNECTED”?萬一,我該如何設(shè)置最大
    發(fā)表于 03-02 08:46

    K32W041自SDK v2.6.8起不再重試是怎么回事?

    我們將 K32W041 與我們自己的 802.15.4 協(xié)議一起使用,即不是 Zigbee 或 Thread,并且自 SDK 發(fā)布 v2.6.8 以來,我們觀察到傳輸重試的行為發(fā)生了變化
    發(fā)表于 04-21 07:30

    HBase客戶端實(shí)踐重試機(jī)制

    現(xiàn)在,網(wǎng)易視頻云與大家分享HBase客戶端實(shí)踐重試機(jī)制。 在運(yùn)維HBase的這段時(shí)間里,發(fā)現(xiàn)業(yè)務(wù)用戶一方面比較關(guān)注HBase本身服務(wù)的讀寫性能:吞吐量以及讀寫延遲,另一方面也會(huì)比較關(guān)注HBase
    發(fā)表于 10-10 10:15 ?0次下載
    HBase客戶端<b class='flag-5'>實(shí)踐</b><b class='flag-5'>重試</b>機(jī)制

    Tenacity跨平臺(tái)的音頻編輯器

    ./oschina_soft/tenacity.zip
    發(fā)表于 06-01 15:37 ?4次下載
    <b class='flag-5'>Tenacity</b>跨平臺(tái)的音頻編輯器

    如何在RocketMQ中合理使用重試機(jī)制

    RocketMQ 的重試機(jī)制包括三部分,分別是生產(chǎn)者重試,服務(wù)端內(nèi)部數(shù)據(jù)復(fù)制遇到非預(yù)期問題時(shí)重試,消費(fèi)者消費(fèi)重試
    的頭像 發(fā)表于 11-23 10:15 ?1159次閱讀

    一個(gè)Spring注解輕松搞定循環(huán)重試功能!

    重試等待策略,默認(rèn)使用@Backoff,@Backoff的value默認(rèn)為1000L,我們?cè)O(shè)置為2000L;multiplier(指定延遲倍數(shù))默認(rèn)為0,表示固定暫停1秒后進(jìn)行重試,如果把multiplier設(shè)置為1.5,則第一次重試
    的頭像 發(fā)表于 04-24 11:43 ?614次閱讀
    一個(gè)Spring注解輕松搞定循環(huán)<b class='flag-5'>重試</b>功能!

    磐石測(cè)控:PS-9105S系列小三軸荷重試驗(yàn)機(jī)的分析?

    磐石測(cè)控:PS-9105S系列小三軸荷重試驗(yàn)機(jī)的分析?
    的頭像 發(fā)表于 05-24 11:00 ?475次閱讀
    磐石測(cè)控:PS-9105S系列小三軸荷<b class='flag-5'>重試</b>驗(yàn)機(jī)的分析?

    三軸荷重試驗(yàn)機(jī)原理與結(jié)構(gòu)及領(lǐng)域

    三軸荷重試驗(yàn)機(jī)原理與結(jié)構(gòu)及領(lǐng)域?|深圳市磐石測(cè)控儀器有限公司
    的頭像 發(fā)表于 08-15 09:23 ?974次閱讀
    三軸荷<b class='flag-5'>重試</b>驗(yàn)機(jī)原理與結(jié)構(gòu)及領(lǐng)域

    PS-1305S小型荷重試驗(yàn)機(jī)的優(yōu)勢(shì)所在

    PS-1305S小型荷重試驗(yàn)機(jī)的優(yōu)勢(shì)所在?|深圳磐石測(cè)控
    的頭像 發(fā)表于 09-19 09:20 ?920次閱讀
    PS-1305S小型荷<b class='flag-5'>重試</b>驗(yàn)機(jī)的優(yōu)勢(shì)所在

    三軸荷重試驗(yàn)機(jī)的工作原理是什么

    三軸荷重試驗(yàn)機(jī)的工作原理是什么
    的頭像 發(fā)表于 10-20 09:08 ?2416次閱讀
    三軸荷<b class='flag-5'>重試</b>驗(yàn)機(jī)的工作原理是什么

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

    如何寫得優(yōu)雅、易用,是我們要考慮的問題。 這里要給大家介紹的是一個(gè)第三方庫 - Tenacity (標(biāo)題中的重試機(jī)制并并不準(zhǔn)確,它不是 Python 的內(nèi)置模塊,因此并不能稱之為機(jī)制),它實(shí)現(xiàn)了幾乎我們可以使用到的所有
    的頭像 發(fā)表于 10-21 11:18 ?387次閱讀

    Python中retrying庫的有參數(shù)重試

    有參數(shù)重試 (1) stop_max_attempt_number 在retry中傳入stop_max_attempt_number參數(shù)后可以指定失敗重試的次數(shù) @retry
    的頭像 發(fā)表于 11-14 11:08 ?864次閱讀
    Python中retrying庫的有參數(shù)<b class='flag-5'>重試</b>

    小三軸荷重試驗(yàn)機(jī)是什么?有哪些介紹

    小三軸荷重試驗(yàn)機(jī)是什么?有哪些介紹
    的頭像 發(fā)表于 12-07 09:09 ?481次閱讀
    小三軸荷<b class='flag-5'>重試</b>驗(yàn)機(jī)是什么?有哪些介紹

    三軸荷重試驗(yàn)機(jī)的用途和工作原理

    三軸荷重試驗(yàn)機(jī)的用途和工作原理!|深圳市磐石測(cè)控儀器有限公司
    的頭像 發(fā)表于 12-08 09:06 ?959次閱讀
    三軸荷<b class='flag-5'>重試</b>驗(yàn)機(jī)的用途和工作原理
    主站蜘蛛池模板: 红桃传媒少妇人妻网站无码抽插 | 波多野结衣教师系列6 | 大屁股国产白浆一二区 | 欧美成人精品高清在线观看 | 丰满大屁俄罗斯肥女 | 最新快播网站 | 国内精品视频一区二区在线观看 | 97精品国产高清在线看入口 | 亚洲精品久久久WWW游戏好玩 | 亚洲电影网址 | 涩涩视频www在线观看入口 | 色老头色老太aaabbb | 亚洲一级毛片免费在线观看 | 一本久道久久综合狠狠躁AV | 精子射到丝袜上图 | 天天看片视频免费观看 | 国产成人精品免费视频下载 | 亚洲国产精品无码AV久久久 | 欧美性色xo影院69 | 748亚洲大胆国模人体 | 麻豆AV福利AV久久AV | 色男人综合 | 美国兽皇zoo在线播放 | 三级网址在线 | 蜜臀AV色欲A片无码一区 | 日本漫画母亲口工子全彩 | 麻婆豆腐传媒视频免费 | caoporen超碰在线视频 | 亚洲国产精品特色大片观看 | 97精品伊人久久大香线蕉app | 国产AV亚洲精品久久久久 | 国内精品人妻无码久久久影院蜜桃 | 嫩草伊人久久精品少妇AV网站 | adc我们的永久网址 adc网址在线观看 | 九九热这里只有国产精品 | 凹凸精品视频分类视频 | 国内精品日本久久久久影院 | 国产欧美一区二区三区在线看 | 少妇人妻偷人精品视蜜桃 | 胸大美女又黄的网站 | 中文字幕绝色少妇性 |