无缓冲 urllib2.urlopen
我有一个客户端,用于处理网页界面的长时间运行的过程。我希望这个过程的输出能够实时显示,也就是说,输出一出来就能看到。使用 urllib.urlopen()
的时候效果很好,但它没有 timeout
参数。另一方面,使用 urllib2.urlopen()
时,输出是被缓存的。有没有简单的方法可以关闭这个缓存呢?
2 个回答
0
urllib2
在你调用 read()
的时候会进行缓存,也就是说它会先把数据存起来,等到全部数据都接收完了再一起处理。
不过,你可以指定每次读取的大小,这样就可以关闭这个缓存功能。
比如:
import urllib2
CHUNKSIZE = 80
r = urllib2.urlopen('http://www.python.org')
while True:
chunk = r.read(CHUNKSIZE)
if not chunk:
break
print(chunk)
这样做的话,每次从网络连接中读取一部分数据后就会立即打印出来,而不是等到所有数据都接收完了才一起显示。
0
我想到一个简单的办法,就是用 urllib.urlopen()
配合 threading.Timer()
来模拟超时功能。不过这只是个快速且不太干净的解决方案。