今天我一直在摆弄 Ruby 和线程。我有一个要检查的代理列表。假设超时 10 秒,如果我编写如下内容,则遍历一个非常大的代理列表将花费几个小时:
proxies.each do |proxy|
check_proxy(proxy)
end
我尝试找出线程的第一个问题是如何在同一时间启动多个线程。我在网上找到了一段简洁的代码片段:
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 个工作人员不断随意乱搞,会不会出现文件访问问题?如果是这样的话,有什么好的解决办法吗?
最佳答案
您要查找的关键字是threadpool 。您可以尝试为 Ruby 找到一个(我确信 Github 上至少有几个),或者自己开发一个。
Here's这里有一个简单的实现。
回复:文件访问,IMO 你不应该让工作人员直接更改文件,而应该在主线程中进行。您不想允许同时编辑。
关于ruby - 如何在 ruby 中处理文件时同时运行多个线程?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8307174/