知识点讲解二:关于requests里的timeout()
有料,有料,微信搜索 【K同學啊】 關注這個分享干貨的博主。
本文 GitHub https://github.com/kzbkzb/Python-AI 已收錄,有 Python、深度學習的資料以及我的系列文章。
超時(timeout)
為防止服務器不能及時響應,大部分發(fā)至外部服務器的請求都應該帶著 timeout 參數(shù)。在默認情況下,除非顯式指定了 timeout 值,requests 是不會自動進行超時處理的。如果沒有 timeout,你的代碼可能會掛起若干分鐘甚至更長時間。
連接超時指的是在你的客戶端實現(xiàn)到遠端機器端口的連接時(對應的是 connect() ),Request 會等待的秒數(shù)。一個很好的實踐方法是把連接超時設為比 3 的倍數(shù)略大的一個數(shù)值,因為 TCP 數(shù)據(jù)包重傳窗口 (TCP packet retransmission window) 的默認大小是 3。
在爬蟲代理這一塊我們經(jīng)常會遇到請求超時的問題,代碼就卡在哪里,不報錯也沒有requests請求的響應。
通常的處理是在requests.get()語句中加入timeout限制請求時間
req = requests.get(url, headers=headers, proxies=proxies, timeout=5)如果發(fā)現(xiàn)設置timeout=5后長時間不響應問題依然存在,可以將timeout里的參數(shù)細化
作出如下修改后,問題就消失了
如果在使用timeout過程中遇到ValueError錯誤提示(類似:ValueError: Timeout value connect was Timeout(connect=2.0, read=2.0, total=None), but it must be an int or float. ),這是python-requests version 2.4.3-4版本的一個bug需要我們更新一下requests
pip install -U requests對于timeout=(3,7)中參數(shù)的具體含義我也不是很清楚,知道含義的童鞋可以留言哈
👇🏻掃一掃下方二維碼,獲取7900+本電子書👇🏻 《新程序員》:云原生和全面數(shù)字化實踐50位技術專家共同創(chuàng)作,文字、視頻、音頻交互閱讀
總結(jié)
以上是生活随笔為你收集整理的知识点讲解二:关于requests里的timeout()的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 知识点讲解一:代理ip中的proxies
- 下一篇: 爬虫代理