我正在尝试使用ruby Thread
来处理给定URL的数组的不同页面的内容。然而,试图打开URL时,我总是得到这样的错误:#<SocketError: getaddrinfo: Name or service not known>
与Ruby同时处理网页
这是我正在试图做到这一点:
sites.each do |site|
threads << Thread.new(site) do |url|
puts url
#web = open(url) { |i| i.read } # same issue opening the web this way
web = Net::HTTP.new(url, 443).get('/', nil)
lock.synchronize do
new_md5[sites_hash[url]] = Digest::MD5.hexdigest(web)
end
end
end
sites
是URL的数组。
同样的程序,但连续的作品好吗:
sites.each { |site|
web = open(site) { |i| i.read }
new_md5 << Digest::MD5.hexdigest(web)
}
什么问题?
呃。你打算为每个你必须处理的网站打开一个线程?如果你有10,000个网站呢?设置线程数量的限制,并将'sites'变成队列,并让每个线程删除一个站点,处理它并获得另一个站点。如果队列中没有更多站点,则该线程可以退出。 – 2014-12-05 18:43:15
我有java中的并发经验,这里列表只有5个线程......我只想知道为什么我在打开web时遇到这个问题 – dabadaba 2014-12-05 18:44:53
Ruby的哪个版本? – 2014-12-05 19:05:24