无缓冲 urllib2.urlopen

1 投票
2 回答
1679 浏览
提问于 2025-04-16 05:11

我有一个客户端,用于处理网页界面的长时间运行的过程。我希望这个过程的输出能够实时显示,也就是说,输出一出来就能看到。使用 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() 来模拟超时功能。不过这只是个快速且不太干净的解决方案。

撰写回答