Неустойчивое время завершения при чтении размеров изображений онлайн-ресурсов (с использованием Python и запросов) - PullRequest
0 голосов
/ 27 апреля 2018

Я экспериментирую с чтением размеров изображений через Интернет (используя Python 2.7 и requests).

URL тестового изображения 1: https://img-9gag-fun.9cache.com/photo/ax1WByM_460s.jpg

URL тестового изображения 2: https://img-9gag-fun.9cache.com/photo/abMego9_460s.jpg

Код довольно минимален:

from io import BytesIO
from PIL import Image

def get_web_img_dimensions(url):
    """
    Returns image dimensions
    """
    req = requests.get(url, headers={"Range": "bytes=0-1023",'User-Agent': 'Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:1.9.0.7) Gecko/2009021910 Firefox/3.0.7'})
    im = Image.open(BytesIO(req.content))
    print im.size

Выполнение этого на предоставленном URL тестового изображения 1 заняло 127 секунд. Затем я попытался текстовое изображение URL 2 . На этот раз мой код вернул правильный ответ через 0.5 секунд. Оба изображения загружаются почти мгновенно в мой браузер, что заставляет меня думать, что чтение 1024 байтов не должно быть большой проблемой.

Через некоторое время я снова попробовал URL-адрес тестового изображения 1 . На этот раз потребовалось 0.5 секунды, чтобы вернуть размеры изображения. Но примерно в то же время попытка URL тестового изображения 2 заняла 128 секунд. Странное изменение ролей!

Что здесь происходит под капотом? Эти колебания во времени вообще не связаны с размерами изображения. Во-вторых, как мне закоротить этот код - чтобы он занимал больше x секунд, он ломался и возвращал None? Кстати, обратите внимание, что результаты, использующие urllib или urllib2, также ошибочны.

1 Ответ

0 голосов
/ 13 мая 2018

Виновник действительно включил timeout для вызова.

Внимание: timeout срабатывает, если цель остается необщительной на протяжении timeout. не жестко ограничено, когда прерывать соединение. Быстрый взгляд на timeout здесь: http://docs.python -requests.org / ru / latest / api / # запросы.request

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...