知識點講解三:關於requests裡的timeout()
阿新 • • 發佈:2019-02-05
超時(timeout)
為防止伺服器不能及時響應,大部分發至外部伺服器的請求都應該帶著 timeout 引數。在預設情況下,除非顯式指定了 timeout 值,requests 是不會自動進行超時處理的。如果沒有 timeout,你的程式碼可能會掛起若干分鐘甚至更長時間。
連線超時指的是在你的客戶端實現到遠端機器埠的連線時(對應的是 connect() ),Request 會等待的秒數。一個很好的實踐方法是把連線超時設為比 3 的倍數略大的一個數值,因為 TCP 資料包重傳視窗 (TCP packet retransmission window) 的預設大小是 3。
在爬蟲代理這一塊我們經常會遇到請求超時的問題,程式碼就卡在哪裡,不報錯也沒有requests請求的響應。
通常的處理是在requests.get()語句中加入timeout限制請求時間
req = requests.get(url, headers=headers, proxies=proxies, timeout=5)
如果發現設定timeout=5後長時間不響應問題依然存在,可以將timeout裡的引數細化
作出如下修改後,問題就消失了
req = requests.get(url, headers=headers, proxies=proxies, timeout=(3,7))
如果在使用timeout過程中遇到ValueError錯誤提示(類似:ValueError: Timeout value connect was Timeout(connect=2.0, read=2.0, total=None), but it must be an int or float.
pip install -U requests
對於timeout=(3,7)中引數的具體含義我也不是很清楚,知道含義的童鞋可以留言哈