【发布时间】:2011-11-30 00:02:31
【问题描述】:
我今天一直在玩弄 Ruby 和线程。我有一个要检查的代理列表。如果我编写如下内容,假设通过一个非常大的代理列表需要 10 秒的超时时间将花费数小时:
proxies.each do |proxy|
check_proxy(proxy)
end
我试图找出线程的第一个问题是如何同时启动多个线程。我在网上找到了一段简洁的小sn-p代码:
for page in pages
threads << Thread.new(page) { |myPage|
puts "Fetching: #{myPage}\n"
doc = Hpricot(open(myPage.to_s)).to_s
puts "Got #{myPage}: #{doc.size}"
}
end
就同时启动它们而言,似乎工作得很好。所以现在我可以...开始同时检查所有 7000 条记录?
我如何去一个文件,为每个线程取出一行,运行一批像 20 并重复这个过程?
我可以运行一个 while 循环来同时启动 20 个线程(从文件中删除行)并一直运行直到文件为空白?
我对我应该做的事情的逻辑有点薄弱。
谢谢大家!
PS。
另一个想法:如果 20 名工人不断地随意弄乱文件,会不会出现文件访问问题?如果是这样,有什么好的方法可以解决这个问题?
【问题讨论】:
标签: ruby windows multithreading