成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

少有人知的 Python "重試機制"

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

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

[[334139]]

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

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

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

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

 

  1. $ pip install tenacity 

1. 最基本的重試

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

 

  1. from tenacity import retry 
  2.  
  3. @retry 
  4. def test_retry(): 
  5.     print("等待重試,重試無間隔執行..."
  6.     raise Exception 
  7.  
  8. test_retry() 

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

 

  1. from tenacity import retry, wait_fixed 
  2.  
  3. @retry(wait=wait_fixed(2)) 
  4. def test_retry(): 
  5.     print("等待重試..."
  6.     raise Exception 
  7.  
  8. test_retry() 

2. 設置停止基本條件

只重試7 次

 

  1. from tenacity import retry, stop_after_attempt 
  2.  
  3. @retry(stop=stop_after_attempt(7)) 
  4. def test_retry(): 
  5.     print("等待重試..."
  6.     raise Exception 
  7.  
  8. test_retry() 

重試 10 秒后不再重試

 

  1. from tenacity import retry, stop_after_delay 
  2.  
  3. @retry(stop=stop_after_delay(10)) 
  4. def test_retry(): 
  5.     print("等待重試..."
  6.     raise Exception 
  7.  
  8. test_retry() 

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

 

  1. from tenacity import retry, stop_after_delay, stop_after_attempt 
  2.  
  3. @retry(stop=(stop_after_delay(10) | stop_after_attempt(7))) 
  4. def test_retry(): 
  5.     print("等待重試..."
  6.     raise Exception 
  7.  
  8. test_retry() 

3. 設置何時進行重試

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

 

  1. from requests import exceptions 
  2. from tenacity import retry, retry_if_exception_type 
  3.  
  4. @retry(retry=retry_if_exception_type(exceptions.Timeout)) 
  5. def test_retry(): 
  6.     print("等待重試..."
  7.     raise exceptions.Timeout 
  8.  
  9. test_retry() 

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

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

 

  1. from tenacity import retry, stop_after_attempt, retry_if_result 
  2.  
  3. def is_false(value): 
  4.     return value is False 
  5.  
  6. @retry(stop=stop_after_attempt(3), 
  7.        retry=retry_if_result(is_false)) 
  8. def test_retry(): 
  9.     return False 
  10.  
  11. test_retry() 

4. 重試后錯誤重新拋出

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

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

 

  1. from tenacity import retry, stop_after_attempt 
  2.  
  3. @retry(stop=stop_after_attempt(7), reraise=True
  4. def test_retry(): 
  5.     print("等待重試..."
  6.     raise Exception 
  7.  
  8. test_retry() 

5. 設置回調函數

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

 

  1. from tenacity import * 
  2.  
  3. def return_last_value(retry_state): 
  4.     print("執行回調函數"
  5.     return retry_state.outcome.result()  # 表示返回原函數的返回值 
  6.  
  7. def is_false(value): 
  8.     return value is False 
  9.  
  10. @retry(stop=stop_after_attempt(3), 
  11.        retry_error_callback=return_last_value, 
  12.        retry=retry_if_result(is_false)) 
  13. def test_retry(): 
  14.     print("等待重試中..."
  15.     return False 
  16.  
  17. print(test_retry()) 

輸出如下

 

  1. 等待重試中... 
  2. 等待重試中... 
  3. 等待重試中... 
  4. 執行回調函數 
  5. False 

 

責任編輯:華軒 來源: Python編程時光
相關推薦

2019-03-19 09:00:14

Python 開發編程語言

2022-11-14 08:19:59

重試機制Kafka

2024-09-25 08:32:05

2025-02-26 10:49:14

2021-02-20 10:02:22

Spring重試機制Java

2022-05-06 07:44:10

微服務系統設計重試機制

2025-01-03 08:44:37

kafka消息發送策略

2023-10-27 08:20:12

springboot微服務

2017-07-02 16:50:21

2017-06-16 15:16:15

2023-11-27 07:44:59

RabbitMQ機制

2023-11-06 08:00:38

接口高可用機制

2025-05-28 01:15:00

Golang重試機制

2018-06-04 22:27:47

2025-04-18 03:00:00

2024-01-04 18:01:55

高并發SpringBoot

2025-02-27 09:35:22

2024-09-30 08:30:37

2025-02-26 08:10:40

2024-08-06 09:51:21

SpringHTTPJSON
點贊
收藏

51CTO技術棧公眾號

主站蜘蛛池模板: 精品亚洲一区二区三区 | 91精品久久久久久久久久入口 | 日韩视频―中文字幕 | 搞黄网站在线观看 | 99热99 | 亚洲欧美视频 | 精品欧美激情在线观看 | 国产日韩欧美在线一区 | 成人亚洲视频 | 亚洲精品1| 91精品国产色综合久久不卡98口 | 国产精品国产三级国产aⅴ原创 | 精品视频一区二区 | 男女羞羞视频网站 | 蜜桃视频一区二区三区 | 91亚洲精| 精品一区二区三区在线观看国产 | 97久久精品午夜一区二区 | 国产高清视频在线观看播放 | 久久久久国产精品一区二区 | 红色av社区| 精品亚洲视频在线 | 国产精品特级毛片一区二区三区 | 成人二区 | 精品久久久一区 | 国产精品视频偷伦精品视频 | 中文字幕在线观看一区二区 | 日本a∨精品中文字幕在线 亚洲91视频 | 一区二区三区视频在线观看 | 国产精品久久久久久久久大全 | 久久麻豆精品 | 精品国产乱码久久久久久丨区2区 | 成人免费淫片aa视频免费 | 国产精品自产拍在线观看蜜 | 网站黄色在线免费观看 | 4hu最新网址 | 日韩一三区 | 日韩在线免费视频 | 久草资源网站 | 99亚洲精品 | 欧美日韩免费视频 |