【发布时间】:2013-01-04 13:22:14
【问题描述】:
我有一个来自 urllib 的 http 响应
response = urllib2.urlopen('http://python.org/')
最终,我希望能够在响应中seek()(至少在开始时)。所以我希望能够有这样的代码:
print result.readline()
result.seek(0)
print result.readline()
这个问题最简单的解决方案是StringIO 或io.BytesIO 像这样:
result = io.BytesIO(response.read())
但是,问题是我想要请求的资源往往非常大,我想在整个下载完成之前开始使用它们(解析...)。 response.read() 正在阻塞。我正在寻找一个非阻塞的解决方案。
理想的代码是来自资源的read(BUFFER_SIZE),当需要更多内容时,只需从响应中请求更多内容。我基本上是在寻找一个可以做到这一点的包装类。哦,我需要一个像对象这样的文件。
我想,我可以这样写:
base = io.BufferedIOBase(response)
result = io.BufferedReader(base)
但是,事实证明这不起作用,我尝试了与 io module 不同的类,但无法使其正常工作。我对任何具有所需行为的包装类感到满意。
【问题讨论】:
标签: python http io stream nonblocking