2009-10-21 75 views
3

如何在python中從HTTP流式服務器讀取二進制流。我做了一個搜索,有人說urllib2可以完成這項工作,但阻止了問題。有人建議Twisted框架。如何在Python中讀取連續的HTTP流數據?

我的問題是:

  1. 如果它只是一個流媒體客戶端後臺讀取數據,我可以忽略造成的urllib2阻塞的問題?

  2. 如果urllib2沒有趕上流式服務器會發生什麼?數據會丟失嗎?

  3. 如果流轉服務器在檢索數據之前需要通過GET或POST進行用戶身份驗證,那麼可以通過urllib2完成這些操作嗎?

  4. 哪裏可以找到一些流客戶端的例子urllib2和Twisted?

謝謝。

傑克

回答

6

打敗的urllib2的固有緩衝,你可以這樣做:

import socket 
socket._fileobject.default_bufsize = 0 

,因爲它是actualy socket._fileobject是下面的緩衝區。沒有數據會丟失,但是使用默認緩衝(一次8192字節)數據可能會因實時流式傳輸而過度分塊(完全刪除緩衝可能會損害性能,但您可以嘗試更小的塊)。

對於Twisted,請參閱twisted.web2.stream及其中的許多鏈接。

+0

嗨亞歷克斯, 我該怎麼做在Python的異步流處理? 傑克 – jack 2009-10-21 08:45:23

+0

@jack,你可以使用'_fileobject' urllib2返回(設置爲非緩衝如上)和'asyncore'&c模塊,但我指向的扭曲方法是非常優越的,所以這就是我推薦。 – 2009-10-21 14:18:57