python requests 重试_我可以为requests.request设置最大重试次数吗?
這不僅會改變最大重試次數(shù),而且還會啟用回退策略,使所有http://地址在重試前睡眠一段時間(總共5次):import requests
from urllib3.util.retry import Retry
from requests.adapters import HTTPAdapter
s = requests.Session()
retries = Retry(total=5,
backoff_factor=0.1,
status_forcelist=[ 500, 502, 503, 504 ])
s.mount('http://', HTTPAdapter(max_retries=retries))
s.get('http://httpstat.us/500')
根據(jù)documentation for ^{}:如果回退因子為0.1,則sleep()將在重試之間睡眠[0.1s、0.2s、0.4s,…]。如果返回的狀態(tài)代碼是500,502,503或504,則還將強(qiáng)制重試。
其他各種Retry選項允許更細(xì)粒度的控制:total–允許的重試總數(shù)。
connect–要重試的連接相關(guān)錯誤數(shù)。
read–讀取錯誤時重試多少次。
重定向-要執(zhí)行的重定向數(shù)。
method_whitelist–一組大寫的HTTP方法動詞,我們應(yīng)該重試。
status_forcelist–一組我們應(yīng)該強(qiáng)制重試的HTTP狀態(tài)代碼。
退避系數(shù)-在兩次嘗試之間應(yīng)用的退避系數(shù)。
raise_on_redirect–如果重定向數(shù)已用盡,是引發(fā)一個MaxRetryError,還是返回一個響應(yīng)代碼在3xx范圍內(nèi)的響應(yīng)。
raise_on_status–類似于raise_on_redirect的含義:如果狀態(tài)落在status_forcelist范圍內(nèi),并且重試次數(shù)已用盡,則是否應(yīng)引發(fā)異常或返回響應(yīng)。
NB:raise-on-u status是一個相對較新的版本,尚未發(fā)布urllib3或請求。raise-on-u status關(guān)鍵字參數(shù)似乎已使其在python 3.6版本中最多進(jìn)入標(biāo)準(zhǔn)庫。
要在特定的HTTP狀態(tài)代碼上重試請求,請使用status-forcelist。例如,狀態(tài)強(qiáng)制列表=[503]將在狀態(tài)代碼503上重試(服務(wù)不可用)。
默認(rèn)情況下,重試僅在以下情況下觸發(fā):無法從池中獲取連接。
TimeoutError
HTTPException提升(在Python 3 elsehttplib中從http.client開始)。
這似乎是低級HTTP異常,如URL或protocol not
形狀正確。
SocketError
ProtocolError
注意,這些都是阻止接收常規(guī)HTTP響應(yīng)的異常。如果生成任何常規(guī)響應(yīng),則不執(zhí)行重試。如果不使用狀態(tài)強(qiáng)制列表,即使是狀態(tài)為500的響應(yīng)也不會重試。
為了使其以更直觀的方式操作遠(yuǎn)程API或web服務(wù)器,我將使用上面的代碼片段,它強(qiáng)制在狀態(tài)500,502,503和504上重試,所有這些狀態(tài)在web上并不少見,并且(可能)在足夠長的退避期內(nèi)可以恢復(fù)。
編輯的:直接從urllib3導(dǎo)入{}類。
總結(jié)
以上是生活随笔為你收集整理的python requests 重试_我可以为requests.request设置最大重试次数吗?的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 求无序序列每个元素最接近的值
- 下一篇: 以python程序调用的系统_pytho