好湿?好紧?好多水好爽自慰,久久久噜久噜久久综合,成人做爰A片免费看黄冈,机机对机机30分钟无遮挡

主頁 > 知識庫 > python3 解決requests出錯重試的問題

python3 解決requests出錯重試的問題

熱門標簽:京華圖書館地圖標注 佛山通用400電話申請 打印谷歌地圖標注 看懂地圖標注方法 電話外呼系統招商代理 廣東旅游地圖標注 蘇州人工外呼系統軟件 電話機器人貸款詐騙 淮安呼叫中心外呼系統如何

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

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

導入方式:

from retrying import retry

簡單使用

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

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

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)

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

stop_max_attempt_number

用來設定最大的嘗試次數,超過該次數就停止重試

stop_max_delay

超過時間段,函數就不會再執行了

wait_random_min和wait_random_max

用隨機的方式產生兩次retrying之間的停留時間

補充:python中Requests的重試機制

requests原生支持

import requests
from requests.adapters import HTTPAdapter
s = requests.Session()
# 重試次數為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(指數退避算法)

什么是指數退避算法

在wiki當中對指數退避算法的介紹是:

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.

翻譯成中文的意思大概是“在各種的計算機網絡中,二進制指數后退或是截斷的二進制指數后退使用于一種隔離同一數據塊重復傳輸的算法,常常做為網絡避免沖突的一部分”

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

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

當系統每次調用失敗的時候,我們都會產生一個新的集合,集合的內容是0~2n-1,n代表調用失敗的次數

第一次失敗 集合為 0,1

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

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

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

為什么要使用指數退避算法

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

應用場景有哪些

接入三方支付服務,在三方支付提供的接入接口規范中,服務方交易結束結果通知和商戶主動查詢交易結果都用到重發機制

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

代碼示例

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

您可能感興趣的文章:
  • python爬蟲之利用Selenium+Requests爬取拉勾網
  • Python requests timeout的設置
  • python+requests+pytest接口自動化的實現示例
  • Python requests庫參數提交的注意事項總結
  • python urllib.request模塊的使用詳解
  • python requests完成接口文件上傳的案例
  • python爬取豆瓣電影排行榜(requests)的示例代碼
  • requests在python中發送請求的實例講解
  • python 實現Requests發送帶cookies的請求
  • python軟件測試Jmeter性能測試JDBC Request(結合數據庫)的使用詳解
  • python requests庫的使用
  • python實現文件+參數發送request的實例代碼
  • Python爬蟲基礎之requestes模塊

標簽:畢節 江蘇 股票 呼和浩特 湖州 中山 衡水 駐馬店

巨人網絡通訊聲明:本文標題《python3 解決requests出錯重試的問題》,本文關鍵詞  python3,解決,requests,出錯,;如發現本文內容存在版權問題,煩請提供相關信息告之我們,我們將及時溝通與處理。本站內容系統采集于網絡,涉及言論、版權與本站無關。
  • 相關文章
  • 下面列出與本文章《python3 解決requests出錯重試的問題》相關的同類信息!
  • 本頁收集關于python3 解決requests出錯重試的問題的相關信息資訊供網民參考!
  • 推薦文章
    主站蜘蛛池模板: 亚洲欧洲国产经精品香蕉网| 日本人妻中文无码毛茸茸的麦子| 一阴吞两阳| 思思久久99热免费精品6| h真紧很爽| 国产AV麻豆美艳苏语棠| 手机在线播放免费1024| 美女被在线网站免费视频| 久久国产精品嫩草影院的推荐理由| 超污的网站| 久久国产精品免费观看| 获嘉县| 91欧美精品综合在线观看| 成品人片α免费观看| 用力好舒服| 三级理论电影手机在线观看| 扒开内裤直接进| 国产萌白酱白丝AV在线观看 | 最近中文字幕2019高清5| 一本色道a无线码一区v-爱岛国 | 国产水柔系列4p| 国产伦精品二区三区免费观看 | 迅播影院理论片| 韩国日本在线| 性欧美XXXXX精品HD黑人| 国产精品新婚门| 欧美老人巨大xxxx做受视频| 人妻浓厚舌吻中文字幕电影??| 私密按摩师免费完整| 老师粗又长好猛好爽视频| 免费的美女大胸MM视频| 一个人视频在线观看www| 不能流泪的悲伤电影| 丰满人妻熟妇乱又伦精品凤鸣阁 | 人人插人人舔| 亚洲人成人网站色| 丰满的岳被粗大爽ⅩXoo视频 | 香港一级淫片高清视频| 污的视频网站| 老司机精品福利视频| 日本在线观看www鲁啊鲁视频|