2009-10-21 81 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