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を呼び出したくありません。