【发布时间】:2014-12-05 18:21:48
【问题描述】:
我正在尝试使用 ruby Thread 处理给定 URL 数组的不同页面的内容。但是,在尝试打开 URL 时,我总是收到此错误:#<SocketError: getaddrinfo: Name or service not known>
这就是我尝试的方式:
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变成一个队列,让每个线程删除一个站点,处理它并获取另一个站点。如果队列中没有更多站点,则线程可以退出。 -
我有java并发的经验,这里列表只有5个线程...我只是想知道为什么我在打开网络时遇到这个问题
-
什么版本的 Ruby?
标签: ruby concurrency parallel-processing