Как быстро скачать много веб-страниц в ruby? Распараллеливание загрузки? - PullRequest
3 голосов
/ 18 февраля 2009

Мне нужно очистить (используя scrAPI) 400+ веб-страниц ruby, мой фактический код очень последовательный:

data = urls.map {|url| scraper.scrape url }

На самом деле код немного другой (обработка исключений и прочее).

Как я могу сделать это быстрее? Как я могу распараллелить загрузки?

Ответы [ 2 ]

5 голосов
/ 18 февраля 2009
th = []
data = []
dlock = Mutex.new

urls.each do |url|
  th << Thread.new(url) do |url|
    d = scraper.scrape url
    dlock.synchronize { data << d }
  end
end

th.each { |t| t.join }

Тад! (Внимание; записано из памяти, не проверено, может съесть вашего котенка и т. Д.)

Редактировать: Я подумал, что кто-то должен был написать обобщенную версию этого, и поэтому у них есть: http://peach.rubyforge.org/ - наслаждайтесь!

0 голосов
/ 18 февраля 2009

Это пример, используемый в объяснении потоков в Pickaxe:

http://www.rubycentral.com/pickaxe/tut_threads.html

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

...