Я использую Ruby 1.9.2.
У меня запущен поток, который периодически обращается к базе данных. Звонки могут быть довольно долгими, а иногда (по разным причинам) пропадает соединение с БД. Если он все-таки исчезнет, поток просто молча висит там навсегда.
Итак, я хочу обернуть все это таймаутом, чтобы справиться с этим. Проблема в том, что во второй раз, когда должен быть вызван тайм-аут (всегда второй), он все равно просто зависает. Тайм-аут никогда не вступает в силу. Я знаю, что эта проблема существовала в 1.8, но мне казалось, что timeout.rb работал в 1.9.
t = Thread.new do
while true do
sleep SLEEPTIME
begin
Timeout::timeout(TIMEOUTTIME) do
puts "About to do DB stuff, it will hang here on the second timeout"
db.do_db_stuff()
process_db_stuff()
end
rescue Timeout::Error
puts "Timed out"
#handle stuff here
end
end
end
Есть идеи, почему это происходит и что я могу с этим поделать?