2010年12月29日水曜日

Rubyのスレッドプログラミングで悩んでいます。添削お願いします><

このエントリーをはてなブックマークに追加

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つが終わったらすぐに次のスレッドを立ち上げるみたいな処理ってどうやって書けば良いんだろう。
正直、分かりません。悩んでます。

2 件のコメント :

  1. 書いたよ
    https://gist.github.com/758098
    説明は書いてないけど、キーワードで適当にぐぐればわかると思います。

    返信削除
  2. そういえば、Monitor っていうのもありました。
    http://www.ruby-lang.org/ja/man/html/Monitor.html

    返信削除