[英]Python requests module gets stuck on requests.get() and gets timed out
[英]Python requests.get keeps getting timed out for about a minute, then continues working normally
我已經嘗試解決此問題大約一個星期了。 我可能錯過了確實很明顯的東西,或者問題出在API的服務器端,或者服務器故意使我停滯了(我用python編碼)。
我正在嘗試做的是:
我使用請求庫在python中對此進行了編碼。 經過幾次迭代,它仍然可以正常工作,但是服務器停止響應。 為了克服這個問題,我在request.get中添加了超時。 它超時,但是服務器在大約1分鍾內也沒有響應新查詢。 然后,一切又可以順利進行幾次迭代,然后停頓,然后重復一次。
這是python代碼。
import requests, json
import thread, threading
from time import sleep, clock
#Get queue
conn = requests.get('http://data.bter.com/api/1/pairs/')
mainQueue = json.loads(conn.content)
conn.close()
#Variable globals
marketCount = 0
queue = mainQueue[:]
#Static globals
lock = threading.Lock()
completeSize = len(queue)
def getOrderData(marketid):
global queue, marketCount
try:
data = requests.get(str('http://data.bter.com/api/1/depth/'
+marketid), timeout = 3)
except:
with lock:
print "Timed out: %s" % marketid
queue.append(marketid)
return
with lock:
marketCount += 1
data.close()
return
while True:
print "##################################"
#Initialize data
crT = clock()
marketCount = 0
queue = mainQueue[:]
#Start retrieving all markets
while marketCount != completeSize:
while len(queue) == 0 and marketCount != completeSize:
sleep(0.01)
if marketCount != completeSize:
marketid = queue.pop(0)
thread.start_new_thread(getOrderData, (marketid,))
#Print time spent
print "Finished, total time:",clock()-crT
sleep(1)
這是程序在運行時的行為方式。
“完成”表示我一次獲得了所有財務數據,並開始再次對其進行更新。 如您所見,似乎一切正常,然后開始停頓,超時。 突然,事情又開始正常工作了。 我還注意到,在關閉與data.close()的連接后,狀態為TIME_WAIT的tcp連接將在tcp監視程序中保留很長時間。 經過幾次迭代后,其中有大量TONS,僅在TIME_WAIT狀態下等待。
所以,這是我的問題
我知道我的代碼還沒有保存數據。 我只是想先得到它。 代碼不好,但是因為我正在測試一個簡短的片段,所以我沒有理會注釋(我改變了很多次,試圖找到一種方法)
提前致謝。 我真的希望我能克服這個困難。
您正在非常頻繁地執行請求,這很可能是服務器不允許的。 他們可能使用的技術稱為調節 ,請訪問http://www.django-rest-framework.org/api-guide/throttling ,他們對此有很好的解釋。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.