Как ускорить HTTP-запрос - PullRequest
       7

Как ускорить HTTP-запрос

2 голосов
/ 26 февраля 2011

Мне нужно получить данные JSON, и я использую urllib2:

request = urllib2.Request(url)
request.add_header('Accept-Encoding', 'gzip')
opener = urllib2.build_opener()
connection = opener.open(request)
data = connection.read()

но, хотя данные не такие большие, они слишком медленные.
Есть ли способ ускорить это? Я тоже могу использовать сторонние библиотеки.

Ответы [ 4 ]

5 голосов
/ 26 февраля 2011

Accept-Encoding:gzip означает, что клиент готов сжать кодированный контент, если сервер готов его отправить первым. Остальная часть запроса передается через сокеты и через стек TCP / IP вашей операционной системы, а затем на физический уровень.

Если сервер поддерживает ETag, вы можете отправить заголовок If-None-Match, чтобы убедиться, что содержимое не изменилось, и полагаться на кэш. Примером является , приведенное здесь .

Вы не можете многое сделать с клиентами только , чтобы повысить скорость HTTP-запроса.

2 голосов
/ 26 февраля 2011

Вы зависите от ряда различных вещей, которые могут быть вне вашего контроля:

  1. Задержка / пропускная способность вашего соединения
  2. Задержка / пропускная способность подключения к серверу
  3. Загрузка серверного приложения и его отдельных процессов

В пунктах 2 и 3, вероятно, и заключается проблема, и вы не сможете с ней что-то сделать.Может ли контент кэшироваться?Это будет зависеть от потребностей вашего приложения и заголовков HTTP (например, ETags , Cache-Control, Last-Modified), которые возвращаются с сервера.Сервер может обновляться только каждый день, и в этом случае вам лучше всего запрашивать данные каждый час.

0 голосов
/ 26 февраля 2011

Если вы делаете много запросов, посмотрите на многопоточность.Приблизительно 10 работников, делающих запросы, могут ускорить процесс - вы не остановитесь, если одному из них потребуется слишком много времени для получения соединения.

0 голосов
/ 26 февраля 2011

Маловероятно, что проблема с urllib. Если у вас есть проблемы с сетью и производительность: рассмотрите возможность использования таких инструментов, как Wireshark, для исследования на сетевом уровне. У меня очень сильные сомнения, что это как-то связано с Python.

...