スレッドを使用してHTTP経由でHTMLページをフェッチするRubyスクリプトがあります。
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で動作しているのか、それとも単に新しいジョブが表示されるのを待っているのか。
それを行う正しい方法は何ですか?