urllib.urlopen()懒惰地下载数据吗?

时间:2015-04-02 23:50:12

标签: python parsing image-processing html-parsing urllib2

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

在_fetch_image_size中,它们使用urllib2,就好像只在调用response.read(1024)后才下载图像字节。我搜索了一下以确认urllib2仅在调用read()时才优化为懒惰下载字节,但我找不到关于返回类型(httplib.HTTPResponse)的大量文档。只是它是一个类似文件的对象(所以你可以在上面调用read())。

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

1 个答案:

答案 0 :(得分:0)

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

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

干杯!