Код: Выделить всё
from urllib2 import Request, urlopen
req = Request(url)
for key, val in headers.items():
req.add_header(key, val)
res = urlopen(req, timeout = timeout)
# This line blocks
content = res.read()
Какие еще варианты существуют? Существует ли HTTP-библиотека для Python, которая обрабатывает тайм-ауты чтения? Я просмотрел httplib2 и запросы, и они, похоже, страдают той же проблемой, что и выше. Я не хочу писать свой собственный неблокирующий сетевой код с использованием модуля сокета, поскольку считаю, что для этого уже должна быть библиотека.
Ни одно из приведенных ниже решений не делает этого за меня. Вы можете сами убедиться, что установка таймаута сокета или urlopen не имеет никакого эффекта при загрузке большого файла:
Код: Выделить всё
from urllib2 import urlopen
url = 'http://iso.linuxquestions.org/download/388/7163/http/se.releases.ubuntu.com/ubuntu-12.04.3-desktop-i386.iso'
c = urlopen(url)
c.read()
Подробнее здесь: https://stackoverflow.com/questions/954 ... tp-library
Мобильная версия