Глядя на коде питона Reddit для выбора изображения из HTML URL-адреса в: https://github.com/reddit/reddit/blob/master/r2/r2/lib/media.py#L178Есть ли urllib.urlopen() скачать данные лениво?
В _fetch_image_size, они используют urllib2 как будто изображение байт загружается только после вызова response.read (1024). Я немного искал, чтобы подтвердить, что urllib2 оптимизирован для ленивой загрузки байтов только при вызове read(), но я не смог найти много документации по типу возвращаемого значения (httplib.HTTPResponse). Только это файл-подобный объект (поэтому вы можете вызвать read() на нем).
Я тестировал urllib2.urlopen(), и у меня есть небольшая задержка для меня, но, возможно, это просто задержка в открытии сокета. Вызов read() для результата очень быстрый для несколько большого изображения.
Очень интересно, тогда появляется reddit, не получает полного выигрыша от производительности, из которого они подразумевают, что они попадают в комментарий (хотя они не избегают цикла через остальную часть данных изображения. Sidebar - есть ли какое-либо преимущество в памяти, загрузка данных полного байта изображения в память? Знание сокетов немного нечеткое). Есть ли у вас какие-либо ссылки на этот ответ, где я могу больше узнать или вы просто знакомы с внутренними работами urllib2? – kcmoffat
Я наблюдал за гнездом и делал паузу в разных местах процесса. Все уже находится в памяти после первоначального запроса в объекте, возвращаемом из urllib2.urlopen(), но если он дублируется, он сохранит дополнительную память. –
Большое спасибо! – kcmoffat