Время ожидания решения системного вызова в Ruby в Windows XP - PullRequest
1 голос
/ 10 февраля 2011

Следующий код

require 'timeout'

begin
  timeout(20) do              # Line 4
    result = `hostname`
  end                         # Line 6
rescue Timeout::Error
  puts "Timeout"
  exit
end

puts "Result:" + result       # Line 12

выдает ошибку

issue.rb: 12: в <main>': undefined local variable or method result 'для main: Object (NameError)

но если я закомментирую элемент тайм-аута (строки 4 и 6), он будет работать нормально.Я пытался использовать IO.popen, IO.select и т. Д., Но ничего из этого не помогает.Я использовал эту технику тайм-аута во многих других областях, и она работала нормально.

Похоже, она не связана со значением тайм-аута, так как я экспериментировал с гораздо большими и меньшими значениями.* Я использую Ruby 1.92 на Windows XP.Любая помощь очень ценится.

ps Моя первоначальная проблема не заключалась в запуске "hostname", а в более сложном пакетном задании SQL Server.В качестве бонуса, будет ли автоматически завершена длительная системная задача, превышающая время ожидания?Я прочитал много сообщений о том, что библиотека тайм-аутов не соблюдает тайм-ауты, когда занят выполнением системных задач?

1 Ответ

1 голос
/ 10 февраля 2011

Переменная result определяется внутри блока тайм-аута, поэтому она не видна во внешней области видимости.Вы должны инициализировать его раньше:

result = nil 
begin
  timeout(20) do              # Line 4
    result = `hostname`
  end                         # Line 6
rescue Timeout::Error
...
...