RubyでいっぱいProcを渡しても、スレッドをつくりすぎないようにちょっとずつ並列実行してくれるヤツ
2011/12/10昼ごろ追記
つか、これじゃダメっぽい。実行されずに終わるスレッドがたまにある。joinの実装?
2011/12/10 18:45 join修正した
2011/12/10 20:40 callのところに例外処理
2011/12/12 Procじゃなくてblockに変更してみた
名前がイケてない
class ThreadCommander require 'thread' def initialize size = 50 @q = SizedQueue.new size @ts = {} end def push &block @q.push block.object_id t = Thread.start do begin yield rescue Exception => e #なんか例外処理 end @q.pop end @ts[:t.object_id] = t end def join while !@q.empty? @ts.each do |k, v| v.join @ts.delete(k) end Thread.pass end end end tq = ThreadCommander.new 10 puts "start." (1..100).to_a.each do |i| tq.push {sleep rand; puts i} puts "." end puts "running." tq.join puts "end."