【问题标题】:How to count running threads in ruby server如何计算 ruby​​ 服务器中正在运行的线程
【发布时间】:2012-05-24 13:00:29
【问题描述】:

我想在 Sinatra Web 服务器的线程中执行“长时间运行”(执行大约需要 0.5 秒)任务。

网络响应大约需要 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 ,因为这会破坏目的 - 除非我们有大量线程在工作,否则会快速返回。

【问题讨论】:

  • 但是没有join,如果其中一个线程完成执行,所有线程都会退出。 Thread.list.count 获取当前正在运行的线程数。 Thread 有一个名为 status 的方法,它为正在处理的线程返回 "sleep""run"。我已添加代码作为答案。
  • 我以为作为 web 服务器运行的 ruby​​ 程序一直在运行,所以在 web 请求期间启动的线程会运行完成?
  • 你说得有道理。将进行更多实验。谢谢

标签: ruby multithreading sinatra


【解决方案1】:

这将给出处于“运行”状态而不是“睡眠”状态的线程数

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

【讨论】:

    猜你喜欢
    • 2011-12-16
    • 1970-01-01
    • 2018-12-23
    • 2016-11-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-02-17
    相关资源
    最近更新 更多