Rubyのスレッドを一定数に抑えたい
この書き方がスマートかどうか分からないので、ブログにアップして添削を待つというWeb2.0な対応(意味不)やりたい事は、Rubyのスレッドを一定数以下に抑えたい。
例えばスレッドを一気に20も30もがーっと立ち上げるんじゃなくて、5個とか10個とかこちらでコントロールできる範囲でそうしたい。
みんな大好きrubyコード
#thread test require "thread" def hoge(data) print "data is " + data + "\n" sleep 1 end thr = [] list = ["a","b","c","d","e"] list.each do |alpha| thr << Thread.new { hoge(alpha) } if thr.size() >= 3 thr.each do |t| t.join end thr = [] end end if thr.size() > 0 thr.each do |t| t.join end end
不満点
これだと、例えば3スレッドまで同時に処理するけれど、その全てのスレッドが終わるまで次のスレッドを生成しない(当たり前だけど)3スレッド処理してて、その内の1つが終わったらすぐに次のスレッドを立ち上げるみたいな処理ってどうやって書けば良いんだろう。
正直、分かりません。悩んでます。
書いたよ
返信削除https://gist.github.com/758098
説明は書いてないけど、キーワードで適当にぐぐればわかると思います。
そういえば、Monitor っていうのもありました。
返信削除http://www.ruby-lang.org/ja/man/html/Monitor.html