3

我需要抓取(使用 scrAPI)400 多个网页 ruby​​,我的实际代码是非常连续的:

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

实际上代码有点不同(异常处理和东西)。

我怎样才能让它更快?如何并行下载?

4

2 回答 2

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 }

多田!(注意;凭记忆写,未经测试,可能会吃掉你的小猫等)

编辑:我想一定有人写了这个的通用版本,所以他们有:http ://peach.rubyforge.org/——享受吧!

于 2009-02-18T01:02:58.140 回答
0

这几乎是 Pickaxe 线程解释中使用的一个示例:

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

您应该能够轻松地调整 Pickaxe 代码以使用您的刮板。

于 2009-02-18T01:04:30.913 回答