Параллельные загрузки - Python

план - это:

Я загружаю веб-страницу, собираю список изображений, проанализированных в DOM, и затем загружаю их. После этого я выполнил бы итерации через изображения для оценки, какое изображение подходит лучше всего для представления веб-страницы.

Проблема состоит в том, что изображения загружаются 1 на 1, и это может занять некоторое время.


Было бы замечательно, если кто-то мог бы указать на меня в некотором направлении относительно темы.

Справка очень ценилась бы.

9
задан Dan Head 2 June 2010 в 23:22
поделиться

3 ответа

Здесь - статья о многопоточности, в которой в качестве примера используется выборка URL.

4
ответ дан 4 December 2019 в 09:12
поделиться

Ускорение сканирования - это, по сути, основной вариант использования Eventlet . Это очень быстро - у нас есть приложение, которое должно получить 2000000 URL-адресов за несколько минут. Он использует самый быстрый интерфейс событий в вашей системе (как правило, epoll) и использует greenthreads (которые построены на основе сопрограмм и стоят очень недорого), чтобы упростить запись.

Вот пример из документации :

urls = ["http://www.google.com/intl/en_ALL/images/logo.gif",
     "https://wiki.secondlife.com/w/images/secondlife.jpg",
     "http://us.i1.yimg.com/us.yimg.com/i/ww/beta/y3.gif"]

import eventlet
from eventlet.green import urllib2  

def fetch(url):
  body = urllib2.urlopen(url).read()
  return url, body

pool = eventlet.GreenPool()
for url, body in pool.imap(fetch, urls):
  print "got body from", url, "of length", len(body)

Это довольно хорошая отправная точка для разработки более полнофункционального краулера. Не стесняйтесь зайти в #eventlet на Freenode, чтобы попросить о помощи.

[обновление: я добавил в документы более сложный пример рекурсивного поискового робота . Клянусь, это было в разработке до того, как был задан этот вопрос, но вопрос, наконец, вдохновил меня закончить его. :)]

13
ответ дан 4 December 2019 в 09:12
поделиться

Хотя многопоточность, безусловно, возможна, я бы вместо этого предложил asyncore - здесь есть отличный пример , который показывает в точности одновременную выборку двух URL-адресов (легко обобщить на любой список URL-адресов!).

6
ответ дан 4 December 2019 в 09:12
поделиться
Другие вопросы по тегам:

Похожие вопросы: