Rubyのスレッドで404チェックをしてみる。RubyのスレッドはIO待ちのときに、制御を切り替えるので、たぶん普通にするより高速になる。
#!/usr/bin/env ruby #Queueを使って、404チェックをする require 'thread' require "open-uri" q = Queue.new #標準入力 input = ARGF|| $stdin #QueueにURLをどんどん追加する。 input.each {|line| q.push line.chop } #アクセスできないURLをチェックする def check404(url) require "open-uri" begin puts(url) open("#{url}") {|f| } rescue p $! end end #Queueを処理するスレッドを作る threads = [1,2,3,4,5] threads.map! {|i| t = Thread.new { require "open-uri" loop { url = q.pop check404 url } } } #スレッドに登録するProcをつくる threads.each{|t| t.join } Signal.trap('INT'){ print "\nINTを補足した。\n" Thread::list.each {|t| Thread::kill(t) if t != Thread::current} exit 1 } STDERR.print "END\r\n"
なるはず。。。だけど、なぜかメモリエラー?で落ちる。
Rubyのスレッドがまだよくわかってない。