urllib.urlopen() 是否延迟下载数据?

Does urllib.urlopen() download data lazily?

查看从 url 的 html 中选择图像的 reddit python 代码:https://github.com/reddit/reddit/blob/master/r2/r2/lib/media.py#L178

在 _fetch_image_size 中,他们使用 urllib2,就好像图像字节仅在调用 response.read(1024) 后才下载。我搜索了一下以确认 urllib2 已优化为仅在调用 read() 时延迟下载字节,但我找不到太多关于 return 类型的文档(httplib.HTTPResponse ).只是它是一个类似文件的对象(因此您可以对其调用 read())。

我测试了 urllib2.urlopen() 它对我来说有一点延迟,但也许这只是打开套接字的延迟。对于较大的图像,对结果调用 read() 的速度非常快。

当调用urllib2.urlopen() 时,它会创建一个套接字并将数据从服务器发送到客户端。此时,套接字处于 CLOSE-WAIT (figure 6)。这意味着它正在等待客户端在套接字上调用 close(),这在您使用 read() 时发生。

为了回答您的问题,无论您阅读了多少,所有数据都会发送给您,并且它发生在阅读之前。

干杯!