2015-02-09 51 views
0

哪個是從Python中的服務器請求常量數據的最佳方式?我已經嘗試過使用Urllib3,但由於某種原因,python腳本停了一會兒。我也在嘗試urllib2(參見下面的代碼),但是我注意到有時會有很大的延遲(urllib3沒有經常發生這種情況),響應不是每0.5秒(有時候每6秒)。我能做些什麼來解決這個問題?不斷請求http數據的最佳方法?

import socket 
import urllib2 
import time 

# timeout in seconds 
timeout = 10 
socket.setdefaulttimeout(timeout) 

while True: 
    try: 
     # this call to urllib2.urlopen now uses the default timeout 
     # we have set in the socket module 
     req = urllib2.Request('https://www.okcoin.com/api/v1/future_ticker.do?symbol=btc_usd&contract_type=this_week') 
     response = urllib2.urlopen(req) 
     r = response.read() 

     req2 = urllib2.Request('http://market.bitvc.com/futures/ticker_btc_week.js') 
     response2 = urllib2.urlopen(req2) 
     r2 = response2.read() 
    except: 
     continue 

    print r + str(time.time()) 
    print r2 + str(time.time()) 
    time.sleep(0.5) 
+0

使互聯網走得更快? (如果請求太多,您可能會遇到請求的API請求速率限制,失敗時間爲6秒) – 2015-02-09 20:38:23

+0

「請求常量數據」?如果您想要連續傳輸流,則需要連接到使用適當擴展的流式傳輸協議的服務(SSE,服務器發送的事件,這是常用的方法 - 請參閱http://en.wikipedia.org/wiki/。 Server-sent_events),而不是給你一個單一的HTTP文檔 - 也就是說,這樣做的權利意味着要編寫* server *來明確支持它;這不是純粹在客戶端做的事情。還有許多其他的長輪詢方法可用,但它們都需要服務器支持。 – 2015-02-09 20:52:38

+0

...您可能還會看到一種您希望持續更新其他幾個名稱下所述更新的提要;見ie。在http://en.wikipedia.org/wiki/Comet_(programming) – 2015-02-09 20:57:35

回答

0

我想我發現了這個問題。我需要保持一個開放的http會話。這樣我可以更持續地獲取數據。這樣做的最好方法是什麼?我做了「http = requests.Session()」並現在使用請求。

相關問題