我有一个 Ruby 脚本使用线程通过 HTTP 获取 HTML 页面:
require "thread"
require "net/http"
q = Queue.new
q << "http://google.com/"
q << "http://rubygems.org/"
q << "http://twitter.com/"
t = Thread.new do
loop do
html = Net::HTTP.get(URI(q.pop))
p html.length
end
end
10.times do
puts t.status
sleep 0.3
end
我正在尝试确定线程从给定来源获取内容时的状态。这是我得到的输出:
run
219
sleep
sleep
7255
sleep
sleep
sleep
sleep
sleep
sleep
65446
sleep
尽管线程实际上正在工作,但它几乎一直处于“睡眠”状态。我知道它正在等待 HTTP 类检索内容。最后的“睡眠”不同:线程试图从空队列中弹出值并切换到“睡眠”状态,直到队列中有新内容。
我希望能够检查线程中发生了什么:它是在 HTTP 上工作还是只是在等待新工作出现?
正确的方法是什么?