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

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

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

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

麥辣雞腿堡 ? 來(lái)源:Python都知道 ? 作者:了不起 ? 2023-11-14 11:08 ? 次閱讀

參數(shù)重試

(1)stop_max_attempt_number

在retry中傳入stop_max_attempt_number參數(shù)后可以指定失敗重試的次數(shù)

@retry(stop_max_attempt_number=2)
def func():
    print(f"記錄失敗重試")
    for item in range(0,100):
        result=item / 0
        print(result)
        return result

func()

因?yàn)檫@里我們指定了失敗后進(jìn)行兩次重試,如果重試執(zhí)行兩次后還是報(bào)錯(cuò)則結(jié)束重試,將錯(cuò)誤信息拋出來(lái)。

圖片

**(2)wait_fixed**傳入wati_fixed后,可以指定重試的時(shí)間

from retrying import retry
import time

# 設(shè)置三秒重試一次
@retry(wait_fixed=3000)  
def func():
    print(f"記錄失敗重試:",time.strftime("%Y-%m-%d %H:%M:%S"))

    result=1 / 0
    print(result)
    return result

func()

圖片

配置重試間隔時(shí)間后,成語(yǔ)遇到執(zhí)行失敗或者報(bào)錯(cuò)后,就會(huì)根據(jù)設(shè)置的重試時(shí)間去進(jìn)行重試執(zhí)行

(3)wait_random_minwait_random_max

通常wait_random_min和wait_random_max是一起搭配使用的,可以設(shè)置一個(gè)重試等待的時(shí)間,然后會(huì)在設(shè)置的時(shí)間區(qū)間內(nèi)隨機(jī)取一個(gè)等待時(shí)間進(jìn)行重試

from retrying import retry
import time


@retry(wait_random_min=1000,wait_random_max=9000)
def func():
    print(f"記錄失敗重試:",time.strftime("%Y-%m-%d %H:%M:%S"))

    result=1 / 0
    print(result)
    return result

func()

圖片

(4)wait_exponential_multiplierwait_exponential_max

官方解釋為:以指數(shù)的形式產(chǎn)生兩次retrying之間的停留時(shí)間, 產(chǎn)生的值為2^previous_attempt_number * wait_exponential_multiplier, previous_attempt_number是前面已經(jīng)retry的次數(shù), 如果產(chǎn)生的這個(gè)值超過(guò)了wait_exponential_max的大小, 那么之后兩個(gè)retrying之間的停留值都為wait_exponential_max

通俗來(lái)點(diǎn)講就是每次重試的時(shí)間以wait_exponential_multiplier設(shè)置的值2,如果重試后還是失敗則繼續(xù)2,直到最后的值等于或則超過(guò)wait_exponential_max設(shè)置的值后,后面的每一次重試等待時(shí)間都是wait_exponential_max設(shè)置的值

from retrying import retry
import time

@retry(wait_exponential_multiplier=1000,wait_exponential_max=10000)
def func():
    print(f"記錄失敗重試:",time.strftime("%Y-%m-%d %H:%M:%S"))

    result=1 / 0
    print(result)
    return result

func()

圖片

(5)wait_func

在前面介紹的參數(shù)都是如何配置失敗沖重試的等待時(shí)間或者重試次數(shù)之類的,但是我們不能時(shí)時(shí)刻刻盯著程序,在程序代碼發(fā)生錯(cuò)誤時(shí)我們應(yīng)該要進(jìn)行發(fā)送短信或者郵件之類的提醒才行

在這里就可以使用到wait_func參數(shù),它接收一個(gè)可執(zhí)行函數(shù),返回一個(gè)具體的間隔時(shí)間數(shù)值,單位ms。接收的函數(shù)須接收兩個(gè)參數(shù):attempt_number當(dāng)前運(yùn)行次數(shù),delay_since_first_attempt_ms當(dāng)前重試機(jī)制運(yùn)行時(shí)間(單位ms)

from retrying import retry
import time


def func_demo(attempt_number,delay_since_first_attempt_ms):
    print("函數(shù)運(yùn)行失敗后運(yùn)行該函數(shù)")

    if attempt_number == 5:
        print("已經(jīng)重試失敗五次了,開始準(zhǔn)備發(fā)送提醒")

    if attempt_number == 10:
        print("已經(jīng)重試失敗超10次了,發(fā)送郵件給相關(guān)人員緊急處理")

    if attempt_number  >10:
        print("重試時(shí)間過(guò)長(zhǎng),做一些其他臨時(shí)方案進(jìn)行補(bǔ)救")

    # return一個(gè)重試的時(shí)間
    return 2000


@retry(wait_func=func_demo)
def func():
    print(f"記錄失敗重試:",time.strftime("%Y-%m-%d %H:%M:%S"))

    result=1 / 0

    return result

func()

圖片

使用wait_func通過(guò)調(diào)用其他可執(zhí)行的函數(shù),我們可以借助它來(lái)做一些臨時(shí)的補(bǔ)救措施,避免程序一直無(wú)法運(yùn)行而產(chǎn)生的影響。

(6)其他參數(shù)

在retry中還存在有很多參數(shù),有興趣的小伙伴可以去詳細(xì)了解下

圖片

  • stop_max_attempt_number:在停止之前嘗試的最大次數(shù),最后一次如果還是有異常則會(huì)拋出異常,停止運(yùn)行,默認(rèn)為5次
  • stop_max_delay:最大延遲時(shí)間,大概意思就是:如果調(diào)用的函數(shù)出現(xiàn)異常,那么就會(huì)重復(fù)調(diào)用這個(gè)函數(shù),最大調(diào)用時(shí)間,默認(rèn)為100毫秒
  • wait_fixed:兩次調(diào)用方法期間停留時(shí)長(zhǎng), 如果出現(xiàn)異常則會(huì)一直重復(fù)調(diào)用,默認(rèn) 1000毫秒
  • wait_random_min:在兩次調(diào)用方法停留時(shí)長(zhǎng),停留最短時(shí)間,默認(rèn)為0
  • wait_random_max:在兩次調(diào)用方法停留時(shí)長(zhǎng),停留最長(zhǎng)時(shí)間,默認(rèn)為1000毫秒
  • wait_incrementing_increment:每調(diào)用一次則會(huì)增加的時(shí)長(zhǎng),默認(rèn) 100毫秒
  • wait_exponential_multiplierwait_exponential_max:以指數(shù)的形式產(chǎn)生兩次「retrying」之間的停留時(shí)間,產(chǎn)生的值為2^previous_attempt_number * wait_exponential_multiplier,previous_attempt_number是前面已經(jīng)「retry」的次數(shù),如果產(chǎn)生的這個(gè)值超過(guò)了wait_exponential_max的大小,那么之后兩個(gè)「retrying」之間的停留值都為wait_exponential_max
  • retry_on_exception: 指定一個(gè)函數(shù),如果此函數(shù)返回指定異常,則會(huì)重試,如果不是指定的異常則會(huì)退出
  • retry_on_result:指定一個(gè)函數(shù),如果指定的函數(shù)返回True,則重試,否則拋出異常退出
  • wrap_exception:參數(shù)設(shè)置為True/False,如果指定的異常類型,包裹在RetryError中,會(huì)看到RetryError和程序拋的Exception error
  • stop_func: 每次拋出異常時(shí)都會(huì)執(zhí)行的函數(shù),如果和stop_max_delay、stop_max_attempt_number配合使用,則后兩者會(huì)失效 (指定的stop_func會(huì)有兩個(gè)參數(shù):attempts, delay)
  • wait_func:和stop_func用法差不多。
聲明:本文內(nèi)容及配圖由入駐作者撰寫或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點(diǎn)僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場(chǎng)。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問(wèn)題,請(qǐng)聯(lián)系本站處理。 舉報(bào)投訴
  • 數(shù)據(jù)庫(kù)
    +關(guān)注

    關(guān)注

    7

    文章

    3712

    瀏覽量

    64027
  • 函數(shù)
    +關(guān)注

    關(guān)注

    3

    文章

    4237

    瀏覽量

    61969
  • python
    +關(guān)注

    關(guān)注

    53

    文章

    4753

    瀏覽量

    84081
收藏 人收藏

    評(píng)論

    相關(guān)推薦

    常用Python庫(kù)那些38個(gè)常用Python庫(kù)的詳細(xì)概述

    Python作為一個(gè)設(shè)計(jì)優(yōu)秀的程序語(yǔ)言,現(xiàn)在已廣泛應(yīng)用于各種領(lǐng)域,依靠其強(qiáng)大的第三方類庫(kù),Python在各個(gè)領(lǐng)域都能發(fā)揮巨大的作用。
    的頭像 發(fā)表于 11-03 10:28 ?3.1w次閱讀

    ADM1266 Python庫(kù)

    ADM1266 Python庫(kù)
    發(fā)表于 03-23 15:47 ?1次下載
    ADM1266 <b class='flag-5'>Python</b><b class='flag-5'>庫(kù)</b>

    詳解Python的Pandas和Numpy庫(kù)

    pandas、numpy是Python數(shù)據(jù)科學(xué)中非常常用的庫(kù),numpy是Python的數(shù)值計(jì)算擴(kuò)展,專門用來(lái)處理矩陣,它的運(yùn)算效率比列表更高效。
    的頭像 發(fā)表于 05-25 12:49 ?2323次閱讀

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

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

    如何安裝常用Python庫(kù)

    Python作為一種流行的編程語(yǔ)言,擁有豐富的第三方庫(kù)資源,這些庫(kù)可以幫助開發(fā)者輕松實(shí)現(xiàn)各種功能,從數(shù)據(jù)分析到Web開發(fā),從機(jī)器學(xué)習(xí)到圖像處理,涵蓋了各個(gè)領(lǐng)域。在Python的開發(fā)過(guò)程
    的頭像 發(fā)表于 04-14 12:11 ?1023次閱讀

    SQLite數(shù)據(jù)庫(kù)python的區(qū)別

    、數(shù)據(jù)科學(xué)等方面。SQLite數(shù)據(jù)庫(kù)Python之間很多不同之處,下面將詳細(xì)解析它們之間的區(qū)別。 1. 數(shù)據(jù)庫(kù)類型 SQLite是一種關(guān)系型數(shù)據(jù)
    的頭像 發(fā)表于 08-28 16:41 ?726次閱讀

    python什么用 如何用python創(chuàng)建數(shù)據(jù)庫(kù)

    python什么用 如何用python創(chuàng)建數(shù)據(jù)庫(kù) Python是一種高級(jí)編程語(yǔ)言,可以用于開發(fā)各種類型的應(yīng)用程序和工具。它的廣泛應(yīng)用使它在
    的頭像 發(fā)表于 08-28 16:41 ?1060次閱讀

    python讀取數(shù)據(jù)庫(kù)數(shù)據(jù) python查詢數(shù)據(jù)庫(kù) python數(shù)據(jù)庫(kù)連接

    ,獲取數(shù)據(jù)庫(kù)的數(shù)據(jù),并對(duì)數(shù)據(jù)進(jìn)行增刪改查等操作。本文將詳細(xì)介紹Python如何連接數(shù)據(jù)庫(kù)、讀取數(shù)據(jù)庫(kù)數(shù)據(jù)以及如何進(jìn)行查詢操作。 一、
    的頭像 發(fā)表于 08-28 17:09 ?1602次閱讀

    Python庫(kù)oloredlogs的使用

    coloredlogs介紹 coloredlogs是一個(gè)Python庫(kù),它允許開發(fā)人員在控制臺(tái)打印彩色日志。這個(gè)庫(kù)的主要優(yōu)點(diǎn)是它可以很容易地改變?nèi)罩鞠⒌念伾?,從而使日志更易于閱讀和理解。這對(duì)
    的頭像 發(fā)表于 10-07 11:28 ?716次閱讀
    <b class='flag-5'>Python</b><b class='flag-5'>庫(kù)</b><b class='flag-5'>中</b>oloredlogs的使用

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

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

    Tenacity重試模塊實(shí)踐

    如何寫得優(yōu)雅、易用,是我們要考慮的問(wèn)題。 這里要給大家介紹的是一個(gè)第三方庫(kù) - Tenacity ,它實(shí)現(xiàn)了幾乎我們可以使用到的所有重試場(chǎng)景,比如: 在什么情況下才進(jìn)行重試重試幾次
    的頭像 發(fā)表于 11-02 11:33 ?332次閱讀

    Python關(guān)于retrying庫(kù)的使用

    到使用try except來(lái)進(jìn)行異常捕捉進(jìn)行失敗重試(Retry)。雖然try-escept一個(gè)非常常見和有效的方式來(lái)增強(qiáng)程序穩(wěn)定性,但是可能一不小心就會(huì)造成棧溢出。 所以接下來(lái)我就來(lái)介紹一個(gè)另外的一個(gè)專門用于失敗重試庫(kù)
    的頭像 發(fā)表于 11-14 11:01 ?400次閱讀

    python如何引入math庫(kù)

    Python,要使用math庫(kù),首先需要先引入它。math庫(kù)Python的一個(gè)標(biāo)準(zhǔn)庫(kù),它提
    的頭像 發(fā)表于 11-22 11:03 ?3383次閱讀

    python第三方庫(kù)哪些

    Python 作為一門功能強(qiáng)大的編程語(yǔ)言,擁有豐富的第三方庫(kù),幾乎覆蓋了各個(gè)領(lǐng)域的應(yīng)用。下面是一些常見且廣泛應(yīng)用的 Python 第三方庫(kù)的總結(jié),希望能為您提供幫助。 NumPy(Nu
    的頭像 發(fā)表于 11-29 14:31 ?1934次閱讀

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

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