13

Sinatra Webサーバーのスレッドで「長時間実行」-(実行に約0.5秒かかる)タスクを実行したい。

Web応答には約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を呼び出したくありません。

4

1 に答える 1

26

これにより、ステータスが「スリープ」ではなく「実行」になっているスレッドの数がわかります。

def running_thread_count
  Thread.list.select {|thread| thread.status == "run"}.count
end
于 2012-05-24T05:00:29.923 に答える