2009-02-18 3 views
3

J'ai besoin de gratter (en utilisant scrAPI) 400+ pages web rubis, mon code actuel est séquentiel:Comment télécharger rapidement beaucoup de pages web en ruby? Téléchargement en parallèle?

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

En fait, le code est un peu différent (gestion des exceptions et d'autres choses).

Comment puis-je le rendre plus rapide? Comment puis-je paralléliser les téléchargements?

+0

Avez-vous besoin de vous soucier de toucher le serveur avec trop de demandes à la fois? –

Répondre

5
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 } 

Tada! (Attention, écrit de mémoire, non testé, peut manger votre chaton, etc.)

Edit: je me suis dit que quelqu'un doit avoir écrit une version généralisée de ce fait, et ils ont donc: http://peach.rubyforge.org/ - amusez-vous!

Questions connexes