我想在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,因为这会破坏目的 - 除非我们备份大量的线程,否则很快就会返回。
答案 0 :(得分:19)
这将给出状态为“run”而不是“sleep”
的线程数def running_thread_count
Thread.list.select {|thread| thread.status == "run"}.count
end