專案需要通過一台主機搭上**向目標伺服器定時交換資料,主機上同時跑著比較占用資源的其他專案。
因為主機上已經執行了比較占用執行緒記憶體資源的其他專案,所以計畫本專案就應該在不能太占用資源,的前提下保持比較流暢的執行。
請求量:每隔5秒鐘,傳送10 ~ 30個請求。
url = config.baseurl + path
try:
response = requests.post(url, data= data, headers=headers ,stream= false,timeout= 10)
except exception as indentfier:
time.sleep(5)
getloaclobjs(false)
par = json.loads(data)
if response != none:
print(" method name = ", par["ipctype"],"\n senddata = ",json.dumps(par), "\n response.state.code = ",response.status_code,"\n response.text = ",response.text,"\n\n", url, "\n\n")
httpconnectionpool(host='172.19.5.101', port=8085): max retries exceeded with url: (caused by connecttimeouterror(, 'connection to timed out. (connect timeout=10)'))
報錯的重點在於 connect timeout
1.由於是timeout的報錯,所以為了專案穩定首先要做的就是做好重連操作,在**中其實已經做好了 try ... except 中 except中為錯誤處理。再次呼叫了方法。
2.處理過後資料互動沒有了毛病,但是報錯仍然頻繁,甚至後邊有了新的錯誤:
requests.exceptions.connectionerror: ('connection aborted.', connectionabortederror(10053, '你的主機中的軟體中止了乙個已建立的連線。', none, 10053, none))
#設定重連次數
requests.adapters.default_retries = 15
# 設定連線活躍狀態為false
s = requests.session()
s.keep_alive = false
基本上意思就是發出的網路請求比較頻繁,requests內建的urllibs3不能及時的為我們斷開連線,於是就有了以上報錯。
**的基本意思就是斷開連線、增加重試次數。
url = config.baseurl + path
try:
#設定重連次數
requests.adapters.default_retries = 15
# 設定連線活躍狀態為false
s = requests.session()
s.keep_alive = false
response = requests.post(url, data= data, headers=headers ,stream= false,timeout= 10)
except exception as indentfier:
time.sleep(5)
getloaclobjs(false)
par = json.loads(data)
if response != none:
print(" method name = ", par["ipctype"],"\n senddata = ",json.dumps(par), "\n response.state.code = ",response.status_code,"\n response.text = ",response.text,"\n\n", url, "\n\n")
還有別的處理方法就是增加**,由於主機是用**的,所以專案換別的**就不太現實,否則有可能直接連線不上目標伺服器。
於是想到了直接管理記憶體,文件上是這麼表述的:
好訊息——歸功於 urllib3,同一會話內的持久連線是完全自動處理的!同一會話內你發出的任何請求都會自動復用恰當的連線!也就是說除非stream=false或者response.content /response.text被操作,不然該請求不會被釋放。注意:只有所有的響應體資料被讀取完畢連線才會被釋放為連線池;所以確保將 stream 設定為 false 或讀取 response 物件的 content 屬性。
同其他的自動管理記憶體的語言一樣,不論垃圾**還是引用計數,都存在乙個問題就是記憶體釋放比較緩慢,於是我就在**中手動關閉了連線。
url = baseurl + path
response = none
try:
#設定重連次數
requests.adapters.default_retries = 5
s = requests.session()
# 設定連線活躍狀態為false
s.keep_alive = false
response = requests.post(url, data=data, headers=headers,stream=false,timeout= 10)
# 關閉請求 釋放記憶體
response.close()
del(response)
except exception as indentfier:
time.sleep(5)
timer = threading.timer(timerflag, upload_position)
timer.start()
最終有效減少了報錯次數。
__end ~
技術部落格
Python Requests 學習筆記
一直想用 python 做點網路相關的東西,找了下,發現了 requests 庫,現記錄下學習筆記。requests 是什麼 requests 入門 requests 提高 首先,requests 是什麼。requests是乙個封裝了 http 操作和請求的庫,可以很方便的抓取網頁的內容,囧,這個是...
python requests傳送json格式資料
requests是常用的請求庫,不管是寫爬蟲指令碼,還是測試介面返回資料等。都是很簡單常用的工具。但是,我們寫程式的時候,最常用的介面post資料的格式是json格式。當我們需要post json格式資料的時候,怎麼辦呢,只需要新增修改兩處小地方即可。詳見如下 import requests imp...
Python Requests 學習 筆記
在做web題目的時候看到一道這樣的題,要讓我迅速提交,看到別人的writeup 發現要寫python指令碼,於是就來學一下python requests 題目連線 來自網路安全實驗室 該文件的內容來自 pyhon requests 快速入門 r requests.get 網域名稱 其他玩法 r re...