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

python3 解決requests出錯重試的問題

 更新時間:2021年04月15日 11:38:02   作者:xudailong_blog  
這篇文章主要介紹了python3 解決requests出錯重試的問題,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧

對python3下的requests使用并不是很熟練,今天稍微用了下,請求幾次下來后發(fā)現(xiàn)出現(xiàn)連接超時的異常,上網(wǎng)查了下,找到了一個還算中肯的解決方法。

retrying是python的一個自帶的重試包

導(dǎo)入方式:

from retrying import retry

簡單使用

retrying 這個包的用法原理就是在你不知道那段代碼塊是否會發(fā)生異常,若發(fā)生異常,可以再次執(zhí)行該段的代碼塊,如果沒有發(fā)生異常,那么就繼續(xù)執(zhí)行往下執(zhí)行代碼塊

以前你的代碼可能是這樣寫的:

def get_html(url):
 pass
def log_error(url):
 pass
url = ""
try:
 get_page(url)
except:
 log_error(url)

也有可能是這樣子寫的:

# 請求超過十次就放棄
attempts = 0
success = False
while attempts < 10 and not success:
 try:
  get_html(url)
  success = True
 except:
  attempts += 1
  if attempts == 10:
   break

使用 retrying 的寫法:

import random
from retrying import retry
@retry()
def do_something_unreliable():
 if random.randint(0, 10) > 1:
  raise IOError("Broken sauce, everything is hosed!!!111one")
 else:
  return "Awesome sauce!"
result = do_something_unreliable()
print(result)

上面的是簡單的用法,你可以試下,下面是一些可選參數(shù)的使用方式。

stop_max_attempt_number

用來設(shè)定最大的嘗試次數(shù),超過該次數(shù)就停止重試

stop_max_delay

超過時間段,函數(shù)就不會再執(zhí)行了

wait_random_min和wait_random_max

用隨機的方式產(chǎn)生兩次retrying之間的停留時間

補充:python中Requests的重試機制

requests原生支持

import requests
from requests.adapters import HTTPAdapter
s = requests.Session()
# 重試次數(shù)為3
s.mount('http://', HTTPAdapter(max_retries=3))
s.mount('https://', HTTPAdapter(max_retries=3))
# 超時時間為5s
s.get('http://example.com', timeout=5)

requests使用的重試算法:BackOff(指數(shù)退避算法)

什么是指數(shù)退避算法

在wiki當(dāng)中對指數(shù)退避算法的介紹是:

In a variety of computer networks, binary exponential backoff or truncated binary exponential backoff refers to an algorithm used to space out repeated retransmissions of the same block of data, often as part of network congestion avoidance.

翻譯成中文的意思大概是“在各種的計算機網(wǎng)絡(luò)中,二進制指數(shù)后退或是截斷的二進制指數(shù)后退使用于一種隔離同一數(shù)據(jù)塊重復(fù)傳輸?shù)乃惴?,常常做為網(wǎng)絡(luò)避免沖突的一部分”

比如說在我們的服務(wù)調(diào)用過程中發(fā)生了調(diào)用失敗,系統(tǒng)要對失敗的資源進行重試,那么這個重試的時間如何把握,使用指數(shù)退避算法我們可以在某一范圍內(nèi)隨機對失敗的資源發(fā)起重試,并且隨著失敗次數(shù)的增加長,重試時間也會隨著指數(shù)的增加而增加。

當(dāng)然,指數(shù)退避算法并沒有人上面說的那么簡單,想具體了解的可以具體wiki上的介紹

當(dāng)系統(tǒng)每次調(diào)用失敗的時候,我們都會產(chǎn)生一個新的集合,集合的內(nèi)容是0~2n-1,n代表調(diào)用失敗的次數(shù)

第一次失敗 集合為 0,1

第二次失敗 集合為 0,1,2,3

第三次失敗 集合為 0,1,2,3,4,5,6,7

在集合中隨機選出一個值記為R,下次重試時間就是R*基本退避時間(對應(yīng)在指數(shù)退避算法中爭用期) 當(dāng)然,為了防止系統(tǒng)無限的重試下去,我們會指數(shù)重新的最大次數(shù)

為什么要使用指數(shù)退避算法

使用指數(shù)退避算法,可以防止連續(xù)的失敗,從某方面講也可以減輕失敗服務(wù)的壓力,試想一下,如果一個服務(wù)提供者的服務(wù)在某一時間發(fā)生了異常、超時或是網(wǎng)絡(luò)抖動,那么頻繁的重試所得到的結(jié)果也大致都是失敗。這樣的頻繁的重試不僅沒有效果,反而還會增服務(wù)的負擔(dān)。

應(yīng)用場景有哪些

接入三方支付服務(wù),在三方支付提供的接入接口規(guī)范中,服務(wù)方交易結(jié)束結(jié)果通知和商戶主動查詢交易結(jié)果都用到重發(fā)機制

在app應(yīng)用中,很多場景會遇到輪詢一類的問題,輪詢對于app性能和電量的消耗都過大。

代碼示例

以上為個人經(jīng)驗,希望能給大家一個參考,也希望大家多多支持腳本之家。如有錯誤或未考慮完全的地方,望不吝賜教。

相關(guān)文章

  • Python判斷對象是否相等及eq函數(shù)的講解

    Python判斷對象是否相等及eq函數(shù)的講解

    今天小編就為大家分享一篇關(guān)于Python判斷對象是否相等及eq函數(shù)的講解,小編覺得內(nèi)容挺不錯的,現(xiàn)在分享給大家,具有很好的參考價值,需要的朋友一起跟隨小編來看看吧
    2019-02-02
  • 一文搞懂關(guān)于?sys.argv?的詳解

    一文搞懂關(guān)于?sys.argv?的詳解

    sys.argv?其實就是一個列表,里邊需要用戶傳入的參數(shù),關(guān)鍵就是要明白這參數(shù)是從程序外部輸入的,而非代碼本身的什么地方,要想看到它的效果就應(yīng)該將程序保存了,從外部來運行程序并給出參數(shù),通過本文學(xué)習(xí)你將明白?sys.argv很多知識,感興趣的朋友一起看看吧
    2023-01-01
  • python圖的深度優(yōu)先和廣度優(yōu)先算法實例分析

    python圖的深度優(yōu)先和廣度優(yōu)先算法實例分析

    這篇文章主要介紹了python圖的深度優(yōu)先和廣度優(yōu)先算法,結(jié)合實例形式分析了圖的深度優(yōu)先算法與廣度優(yōu)先算法相關(guān)概念、原理、實現(xiàn)技巧與操作注意事項,需要的朋友可以參考下
    2019-10-10
  • python中用ctypes模擬點擊的實例講解

    python中用ctypes模擬點擊的實例講解

    在本篇文章里小編給各位整理了一篇關(guān)于python中用ctypes模擬點擊的實例講解內(nèi)容,需要的朋友可以參考學(xué)習(xí)下。
    2020-11-11
  • python 使用tkinter+you-get實現(xiàn)視頻下載器

    python 使用tkinter+you-get實現(xiàn)視頻下載器

    這篇文章主要介紹了python 使用tkinter+you-get實現(xiàn)視頻下載器,幫助大家方便的下載視頻資源,感興趣的朋友可以了解下
    2020-11-11
  • 詳解Python nose單元測試框架的安裝與使用

    詳解Python nose單元測試框架的安裝與使用

    本篇文章主要介紹了詳解Python nose單元測試框架的安裝與使用,小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2017-12-12
  • python使用pandas讀取json文件并進行刷選導(dǎo)出xlsx文件的方法示例

    python使用pandas讀取json文件并進行刷選導(dǎo)出xlsx文件的方法示例

    這篇文章主要介紹了python使用pandas讀取json文件并進行刷選導(dǎo)出xlsx文件的方法,結(jié)合實例形式分析了python調(diào)用pandas模塊針對json數(shù)據(jù)操作的相關(guān)使用技巧,需要的朋友可以參考下
    2023-06-06
  • python實戰(zhàn)之制作表情包游戲

    python實戰(zhàn)之制作表情包游戲

    想知道如何制作表情包游戲嗎?用Python就可以搞定!本文給大家介紹的非常詳細,對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2021-09-09
  • python try...finally...的實現(xiàn)方法

    python try...finally...的實現(xiàn)方法

    這篇文章主要介紹了python try...finally...的實現(xiàn)方法,幫助大家更好的理解和使用python,感興趣的朋友可以了解下
    2020-11-11
  • Python 2種方法求某個范圍內(nèi)的所有素數(shù)(質(zhì)數(shù))

    Python 2種方法求某個范圍內(nèi)的所有素數(shù)(質(zhì)數(shù))

    這篇文章主要介紹了Python 2種方法求某個范圍內(nèi)的所有素數(shù)(質(zhì)數(shù)),文中通過示例代碼介紹的非常詳細,對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2020-01-01

最新評論

青河县| 沈阳市| 襄垣县| 韩城市| 无锡市| 荔波县| 凤翔县| 高阳县| 桦川县| 丰都县| 云南省| 陇川县| 惠来县| 桦川县| 淳化县| 景东| 利川市| 阳谷县| 资中县| 林西县| 吴桥县| 芮城县| 靖远县| 花莲市| 岳普湖县| 南郑县| 天全县| 万源市| 额尔古纳市| 陇南市| 富阳市| 高雄市| 茶陵县| 宿迁市| 彝良县| 岳池县| 库尔勒市| 百色市| 岐山县| 时尚| 徐汇区|