我一直在网上寻找解决方案来解决我的Python问题。我正尝试使用urllib2连接从HTTP服务器读取可能层出不穷的数据流。它是一些交互式通信的一部分,所以重要的是我可以获取可用的数据,即使它不是一个完整的缓冲区。似乎没有办法让read
\ readline
返回可用的数据。它会在返回之前永远阻止整个(无尽的)流等待。便秘的Python urllib2插座
即使我使用fnctl将底层文件描述符设置为非阻塞,urllib2文件对象仍然会阻止!一般来说,似乎没有办法让python文件对象在read
上返回所有可用数据(如果有的话),否则返回阻塞。
我见过一些关于寻求帮助的人的帖子,但我没有看到任何解决方案。是什么赋予了?我错过了什么吗?这看起来像这样一个正常的用例,完全毁了!我希望利用urllib2的能力来检测配置的代理和使用分块编码,但我不能,如果它不会合作。
编辑:根据要求,这里是一些示例代码
客户:
connection = urllib2.urlopen(commandpath)
id = connection.readline()
现在假设服务器使用块传输编码,并写入一个块往下流和块包含行,然后等待。连接仍然打开,但客户端在缓冲区中有数据等待。
我不能得到read
或readline
返回我知道它已经等待的数据,因为它试图读直到连接结束。在这种情况下,连接可能永远不会关闭,因此它将永远等待或直到发生非活动超时,切断连接。一旦连接断开,它将返回,但这显然不是我想要的行为。
我不确定我是否正确理解您要实现的目标。你什么意思是阻止?你的意思是你希望你的脚本能够在流不再提供更多数据或其他东西时继续执行吗? – jsalonen 2010-10-15 09:40:25
请提供一些示例代码;我们至少需要提出任何建议。 – tzot 2010-10-15 14:43:00