Книга: Программирование на языке 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 "До встречи..."
- 13.2.1. Синхронизация с помощью критических секций
- 13.2.2. Синхронизация доступа к ресурсам (mutex.rb)
- 13.2.3. Предопределенные классы синхронизированных очередей
- 13.2.4. Условные переменные
- 13.2.5. Другие способы синхронизации
- 13.2.6. Тайм-аут при выполнении операций
- 13.2.7. Ожидание события
- 13.2.8. Продолжение обработки во время ввода/вывода
- 13.2.9. Реализация параллельных итераторов
- 13.2.10. Параллельное рекурсивное удаление
- Глава 28 Идентификация и аутентификация пользователей
- Идентификация и аутентификация
- 4. Свойства унарных операций
- 3. Свойства бинарных операций
- 4. Варианты операций соединения
- Используйте аутсорсинг
- Формула времени. Тайм-менеджмент на Outlook 2013
- 4.1. Суть обзора задач в тайм-менеджменте. Основные понятия и определения
- 2.4. Сервисные сети и аутсорсинг в выставочной индустрии
- Как написать аутлайн
- Этапы аутсорсинга в цикле прицельного маркетинга
- При неудачном выполнении некоторых операций Windows динамик издает пронзительный звук. Можно ли заставить его замолчать?