Пропустить, если он не отвечает в течение определенного времени

Я создал программу, которая извлекает веб-сайты из Google, а затем выводит их на основной URL: пример http://google.com/search/owie/weikw => http://google.com/. Затем он сохраняет их в файл.

После этого он запускает .each_line на файл затем запускает whois Команда, что я хочу сделать, если команда не отвечает в течение определенного времени, пропустить эту строку файла и перейти к следующей, есть ли способ, которым я могу сделать это?

1 ответ

Решение

Используйте модуль тайм-аута

Если ваш скребок или whois не поддерживают тайм-аут изначально, вы можете использовать Timeout::timeout, чтобы установить верхнюю границу в секундах. Например:

require 'timeout'

MAX_SECONDS = 10 

begin
  Timeout::timeout(MAX_SECONDS) do
    # run your whois
  end
rescue Timeout::Error
  # handle the exception
end

По умолчанию это вызовет исключение Timeout:: Error, если блок превышает ограничение по времени, но вы можете сделать так, чтобы метод вызывал другие исключения, если вы предпочитаете. То, как вы обрабатываете исключения, зависит от вас.

Другие вопросы по тегам