2015-05-13 1 views
2

Я пишу код Python для расширения сокращенных URL-адресов, полученных из Twitter. Я выбрал все URL-адреса и сохранил их в текстовом файле, разделенном новой строкой.Быстрое расширение сокращенных URL-адресов с использованием python

В настоящее время я использую:

response = urllib2.urlopen(url) 
return response.url 

расширить их.

Но метод urlopen(), похоже, не очень быстро расширяет URL-адреса.

У меня около 5,4 миллионов URL-адресов. Есть ли более быстрый способ расширить их с помощью Python?

+0

Выполняете ли вы запросы в последовательности? –

+1

Да, я делаю запросы в последовательности. –

+0

Вы хотите преобразовать сокращенный URL в обычный URL? – Ajay

ответ

4

Я подозреваю, что проблема в том, что сетевые вызовы медленны, а блоки urllib до тех пор, пока они не получат ответ. Так, например, скажем, для получения ответа от службы сокращения URL-адресов требуется 200 мс, тогда вы сможете разрешать только 5 URL/секунду с помощью urllib. Однако, если вы используете асинхронную библиотеку, вы сможете отправить много запросов, прежде чем получить первый ответ. Затем ответы обрабатываются, когда они возвращаются к вашему коду. Это должно значительно увеличить пропускную способность. Для этого есть несколько Python-библиотек (Twisted, gevent и т. Д.), Поэтому вы можете просто захотеть Google для «Python async rest».

Вы также можете попробовать сделать это с большим количеством потоков (я думаю, urllib2 выпустит GIL, пока он ждет ответа, но не уверен). Это было бы не так быстро, как асинхронный, но все равно нужно немного ускорить процесс.

Оба эти решения представляют собой довольно сложную задачу, но если вы хотите быстро ...

+2

Я подозреваю, что сервер сокращения URL-адресов может не быть слишком доволен таким излом из одного IP-адреса и начать блокировку. Осторожно! – Spacedman

Смежные вопросы