Как подсчитать запущенные потоки на рубиновом сервере

Я хочу выполнить задачу "длительное время" - (занимает около 0,5 секунды для выполнения) в потоке на веб-сервере Sinatra.

Веб-ответ занимает около 20 мс, поэтому, если я занят, потоки будут накапливаться...

Итак, я думал, что сделаю это, если я занят.

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

Как вы получаете количество запущенных потоков (я хочу, чтобы количество запущенных потоков и еще не выполнено) - как вы кодируете run_thread_count?

def running_thread_count
 return Thread.list.count
end

Или мне нужно проверить запущенные потоки? то есть, когда поток завершен, перестанет ли он возвращаться в Thread.list?

Я не хочу называть соединение, так как это победит цель - вернуть ее быстро, если мы не поддерживаем много потоков, работающих.

Ответ 1

Это даст количество потоков, которые имеют статус "run", а не "sleep"

def running_thread_count
  Thread.list.select {|thread| thread.status == "run"}.count
end