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