Python requests 多線程抓取 出現HTTPConnectionPool Max retires exceeded異常


https://segmentfault.com/q/1010000000517234

 

2018-07-24 14:14:46,891 - oracle - ERROR - data format error:HTTPConnectionPool(host='10.193.135.102', port=9082): 
Max retries exceeded with url: /collection/agent (Caused by NewConnectionError
('<requests.packages.urllib3.connection.HTTPConnection object at 0x02672AD0>: Failed to establish a new connection: [Errno 10053] ',)),item:

 

多方查閱后發現了解決問題的原因:http連接太多沒有關閉導致的

解決辦法:

1、增加重試連接次數

  requests.adapters.DEFAULT_RETRIES = 5

2、關閉多余的連接

requests使用了urllib3庫,默認的http connection是keep-alive的,requests設置False關閉。

操作方法

s = requests.session()
s.keep_alive = False

 

 

方法二:

是因為在每次數據傳輸前客戶端要和服務器建立TCP連接,為節省傳輸消耗,默認為keep-alive,即連接一次,傳輸多次,然而在多次訪問后不能結束並回到連接池中,導致不能產生新的連接
headers中的Connection默認為keep-alive,
將header中的Connection一項置為close

headers = {
    'Connection': 'close',
}
r = requests.get(url, headers=headers)


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM