2012-05-23 13 views
10

Sinatra Webサーバのスレッドで、「長時間実行」(実行に約0.5秒かかります)タスクを実行します。Rubyサーバで実行中のスレッドを数える方法

私は忙しくならば、スレッドが山積みされますので、ウェブ応答はだから私は、私は私が忙しくならば、それが同期やるだろうと考えていた...、

を約20ミリ秒かかります。..

if (running_thread_count > 10) 
    stuff_that_takes_a_second() 
else 
    Thread.new do 
     stuff_that_takes_a_second() 
    end 
end 

実行スレッドの数を取得するにはどうすればよいですか(まだ起動していないスレッドの数が必要です) - running_thread_countをどのように記述しますか?

def running_thread_count 
return Thread.list.count 
end 

実行中のスレッドを確認する必要はありますか?つまり、スレッドの実行が終了すると、Thread.listに戻りますか?

私はjoinを呼び出すことは目的を破るものではありません。私たちがたくさんのスレッドを使ってバックアップしない限り、すぐに返ることです。

+0

の地位を持つ。しかし 'join'、すべてのスレッドを終了することなく、それらのいずれかが実行を完了した場合されているスレッドの数を与えます。 'Thread.list.count'は、現在実行中のスレッドの数を取得します。 'Thread'は処理中のスレッドに対して' 'sleep ''または '' run "'を返す 'status'メソッドを持っています。私は答えとしてコードを追加しました。 – Kashyap

+0

私は、Webサーバーとして動作しているRubyプログラムが常に稼働していると考えていました。そのため、Webリクエスト中に開始されたスレッドは完了まで実行されますか? –

+0

あなたはそこにポイントを持っています。もっと実験します。ありがとうございました – Kashyap

答えて

17

これは「実行」およびない「スリープ」

def running_thread_count 
    Thread.list.select {|thread| thread.status == "run"}.count 
end 
関連する問題