Python requests 使用心得

2022-02-02 01:35:35 字數 3025 閱讀 6609

專案需要通過一台主機搭上**向目標伺服器定時交換資料,主機上同時跑著比較占用資源的其他專案。

因為主機上已經執行了比較占用執行緒記憶體資源的其他專案,所以計畫本專案就應該在不能太占用資源,的前提下保持比較流暢的執行。

請求量:每隔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 屬性。

也就是說除非stream=false或者response.content /response.text被操作,不然該請求不會被釋放。

同其他的自動管理記憶體的語言一樣,不論垃圾**還是引用計數,都存在乙個問題就是記憶體釋放比較緩慢,於是我就在**中手動關閉了連線。

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...