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

0
  • 聊天消息
  • 系統消息
  • 評論與回復
登錄后你可以
  • 下載海量資料
  • 學習在線課程
  • 觀看技術視頻
  • 寫文章/發帖/加入社區
會員中心
創作中心

完善資料讓更多小伙伴認識你,還能領取20積分哦,立即完善>

3天內不再提示

Python 在什么情況下才進行重試

科技綠洲 ? 來源:Python實用寶典 ? 作者:Python實用寶典 ? 2023-10-21 11:18 ? 次閱讀

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

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

這里要給大家介紹的是一個第三方庫 - Tenacity (標題中的重試機制并并不準確,它不是 Python 的內置模塊,因此并不能稱之為機制),它實現了幾乎我們可以使用到的所有重試場景,比如:

  1. 在什么情況下才進行重試?
  2. 重試幾次呢?
  3. 重試多久后結束?
  4. 每次重試的間隔多長呢?
  5. 重試失敗后的回調?

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

$ pip install tenacity

1. 最基本的重試

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

from tenacity import retry

@retry
def test_retry():
    print("等待重試,重試無間隔執行...")
    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. 設置停止基本條件

只重試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()

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

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. 設置何時進行重試

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

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()

在滿足自定義條件時,再進行重試。

如下示例,當 test_retry 函數返回值為 False 時,再進行重試

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. 重試后錯誤重新拋出

當出現異常后,tenacity 會進行重試,若重試后還是失敗,默認情況下,往上拋出的異常會變成 RetryError,而不是最根本的原因。

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

from tenacity import retry, stop_after_attempt

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

test_retry()

5. 設置回調函數

當最后一次重試失敗后,可以執行一個回調函數

from tenacity import *

def return_last_value(retry_state):
    print("執行回調函數")
    return retry_state.outcome.result()  # 表示返回原函數的返回值

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())

輸出如下

等待重試中...
等待重試中...
等待重試中...
執行回調函數
False
聲明:本文內容及配圖由入駐作者撰寫或者入駐合作網站授權轉載。文章觀點僅代表作者本人,不代表電子發燒友網立場。文章及其配圖僅供工程師學習之用,如有內容侵權或者其他違規問題,請聯系本站處理。 舉報投訴
  • 模塊
    +關注

    關注

    7

    文章

    2696

    瀏覽量

    47436
  • 函數
    +關注

    關注

    3

    文章

    4329

    瀏覽量

    62575
  • 代碼
    +關注

    關注

    30

    文章

    4780

    瀏覽量

    68535
  • python
    +關注

    關注

    56

    文章

    4793

    瀏覽量

    84631
收藏 人收藏

    評論

    相關推薦

    請問什么情況下需要使用通信協議

    最近有個客戶要做一個串口通信控制LED燈的板子當時它問我要用什么通信協議;我門在學習串口通信時并沒有學到什么通信協議把?在網上查了是有一些; 請問:什么情況下需要使用通信協議
    發表于 06-13 04:35

    什么情況下選用PCI板卡?什么情況下選用PXI板卡?

    測控選板卡方案時,什么情況下選PCI,什么情況下選PXI?
    發表于 03-31 20:52

    什么情況下低壓線路保護中要求配置零序電流互感器

    什么情況下低壓線路保護中要求配置零序電流互感器?如何選擇零序電流互感器一次電流值?如何進行安裝?定值如何整定?
    發表于 08-09 07:35

    PCB數字地模擬地怎么區分?什么情況下需要模擬地數字地分開?

    畫原理圖時要考慮模數地分開,怎的需要分開模擬地與數字地..例如PWM控壓和AD采集一個電路上,AD采集元器件的值,當值小時增大電壓,反之減小電壓,這樣是不是就要模擬地數字地分開鋪地???
    發表于 04-10 14:53

    AD9235-65什么情況下需要單端轉差分信號?

    我想用AD9235-65芯片,我的輸入信號頻率50K左右,輸入信號經過濾波后,離AD9235的距離很近,是不是就不需要單端轉差分輸入了?我的信號本來是單端的。或者更進一步,什么情況下需要單端轉差分信號?謝謝!
    發表于 12-14 07:57

    什么情況下數據能恢復和不能恢復

    什么情況下數據能恢復和不能恢復 因數據的破壞復雜多變,數據能否恢復或幾率的大小不能一概而論。請查閱本站相關文章了解數
    發表于 03-29 10:42 ?2832次閱讀

    volte語音通話有什么用,什么情況下可以開/關volte

    聽很多人都在講volte高清語音通話那么什么是vote呢?什么情況下需要開通volte呢?什么情況下又可以關閉volte呢?
    發表于 10-21 16:36 ?1.7w次閱讀

    什么情況下使用示波器

    示波器可以把我們看不見的電信號變換成看得見的圖像,方便來研究各種電現象的變化過程。那么什么情況下使用示波器呢? 使用示波器進行測量需要涂有熒光物質的屏面、主機、探頭配置和穩定的信號。示波器一般都是
    的頭像 發表于 02-01 11:00 ?5715次閱讀

    什么情況下進行電能質量檢測?

    什么情況下進行電能質量檢測?
    發表于 09-08 14:20 ?686次閱讀

    什么情況下選用工業主板

    雖然工業主板和普通主板差異比較多,但是某些情況下工業主板用于商業環境也是可以的,但是實用性不是很好。什么情況下選用工業主板呢?
    的頭像 發表于 02-14 10:34 ?844次閱讀
    <b class='flag-5'>什么情況下</b>選用工業主板

    電機什么情況下需要配減速機?

    電機是運動機械的最常用動力源,今天分享什么情況下電機需要配減速機。
    的頭像 發表于 05-26 17:47 ?1907次閱讀
    電機<b class='flag-5'>什么情況下</b>需要配減速機?

    應急燈什么情況下才會亮?

    應急燈什么情況下才會亮? 應急燈指的是電源發生故障時,正常照明無法使用的情況下,啟動的照明燈。比如說因為火災導致正常照明系統失效時,消防疏散照明燈、消防應急照明燈會自動亮起,起到疏散人群,提供照明
    的頭像 發表于 07-25 13:57 ?1.5w次閱讀

    什么情況下選擇熱電偶?什么情況下選擇熱電阻?哪個更合適?

    什么情況下選擇熱電偶?什么情況下選擇熱電阻?哪個更合適? 熱電偶和熱電阻都是溫度傳感器,用于測量溫度。但是它們的原理、特性和應用場景不同。實際選擇中,需要根據具體情況,選擇更合適的一
    的頭像 發表于 10-26 17:47 ?1684次閱讀

    Tenacity重試模塊實踐

    如何寫得優雅、易用,是我們要考慮的問題。 這里要給大家介紹的是一個第三方庫 - Tenacity ,它實現了幾乎我們可以使用到的所有重試場景,比如: 什么情況下
    的頭像 發表于 11-02 11:33 ?403次閱讀

    什么情況下應測量電動機的絕緣電阻?

    什么情況下應測量電動機的絕緣電阻? 電動機的絕緣電阻是指電機絕緣材料的絕緣性能。它是一個重要的參數,用來評估電機絕緣系統的健康狀況和預測可能出現的故障。什么情況下應該測量電動機的絕
    的頭像 發表于 11-10 14:38 ?1687次閱讀
    主站蜘蛛池模板: 伦理79电影网在线观看| 国产在线视频一区二区不卡| 丰满人妻无码AV系列| 国产白浆视频在线播放| 国产精品日韩欧美一区二区三区| 国产人妻人伦精品熟女麻豆| 精品国产露脸久久AV麻豆| 久久毛片基地| 欧美成人一区二免费视频| 肉色欧美久久久久久久蜜桃| 香蕉97超级碰碰碰碰碰久| 亚洲一区日韩一区欧美一区a| 2020亚洲国产在线播放在线| BLACKED太粗太长| 国产精品日本一区二区在线播放 | 97伦理97伦理2018最新| 办公室的秘密2中文字幕| 国产精品色吧国产精品| 久久久久999| 欧美一区二区三区男同| 亚州三级视频| 92精品国产成人观看免费| 高清无码中文字幕在线观看视频| 黑人猛挺进小莹的体内视频| 蜜桃传媒在线播放| 午夜视频在线瓜伦| 9420高清免费观看在线大全| 国产精品色欲AV亚洲三区软件 | 果冻传媒2021精品在线观看| 美国ZOOM动物在线观看| 双性精跪趴灌满h室友4p| 永久免费看mv网站入口| 纯肉腐文高H总受男男| 九九在线精品视频| 日日久久狠狠8888偷偷色| 亚洲综合AV色婷婷五月蜜臀| youjizz护士| 久久精品人人做人人爽97| 色婷婷国产精品视频一区二区| 曰本老头同性xxxxx| 国产产乱码一二三区别免费|