我一直在搜索因特网,寻找解决我的Python问题的方法。我正在尝试使用URLLIB2连接从HTTP服务器读取可能无限的数据流。这是一些交互通信的一部分,所以我能得到可用的数据是很重要的,即使不是整个缓冲区都满了。似乎没有办法
read
\
readline
返回
可获得的
数据。它将永远阻塞等待整个(无穷无尽的)流,然后再返回。
即使我使用fnctl将底层文件描述符设置为非阻塞,urllib2文件对象
仍然阻塞!!
一般来说,似乎没有办法使python文件对象
阅读
,返回所有可用数据(如果有),否则阻止。
我看到过一些关于寻求帮助的人的帖子,但我没有看到任何解决方案。给出了什么?我错过什么了吗?这看起来像是一个很正常的用例,完全毁了!我希望利用urllib2的能力来检测配置的代理并使用分块编码,但如果它不合作,我就不能。
编辑:根据要求,这里有一些示例代码
客户:
connection = urllib2.urlopen(commandpath)
id = connection.readline()
现在假设服务器正在使用分块传输编码,并沿着流写入一个块,该块包含行,然后等待。连接仍处于打开状态,但客户端的数据在缓冲区中等待。
我不能得到
阅读
或
要返回数据,我知道它正在等待,因为它试图读取数据,直到连接结束。在这种情况下,连接可能永远不会关闭,因此它也将等待
永远
或者在非活动超时之前,切断连接。一旦连接断开,它将返回,但这显然不是我想要的行为。