Книга: Программирование на языке Ruby

13.2.6. Тайм-аут при выполнении операций

13.2.6. Тайм-аут при выполнении операций

Часто встречается ситуация, когда на выполнение операции отводится определенное максимальное время. Это позволяет избежать бесконечных циклов и более строго контролировать порядок работы. Подобная возможность очень полезна, в частности, в сетевых приложениях, где ответ от сервера может и не прийти.

Библиотека timeout.rb предлагает решение этой проблемы на основе потоков (см. листинг 13.6). С методом timeout ассоциирован выполняемый блок. Если истечет заданное число секунд, метод возбуждает исключение TimeoutError, которое можно перехватить с помощью rescue.

Листинг 13.6. Пример тайм-аута

require 'timeout.rb'
flag = false
answer = nil
begin
 timeout(5) do
  puts "Хочу печенье!"
  answer = gets.chomp
  flag = true
 end
 rescue TimeoutError
 flag = false
end
if flag
 if answer == "cookie"
  puts "Спасибо! Хрум, хрум..."
 else
  puts "Это же не печенье!"
  exit
 end
else
 puts "Эй, слишком медленно!"
 exit
end
puts "До встречи..."

Оглавление книги


Генерация: 2.486. Запросов К БД/Cache: 3 / 0
поделиться
Вверх Вниз