如果方法花费太长时间,如何跳过

时间:2013-12-17 10:24:36

标签: ruby timeout

我有一个redis通话,由于网络问题可能需要很长时间,直到通话超时。 redis电话并不重要。

有没有办法用一些东西来包装那个调用,这个东西会检查它需要多长时间以及是否需要太长时间才能跳过调用(并且可能会调用其他方法来记录它)?

类似

check_time(30.seconds) do 
 $redis.something

 if error
   log it
 end
end

2 个答案:

答案 0 :(得分:3)

您可以使用Timeout。以下是文档中的示例:

require 'timeout'
status = Timeout::timeout(5) {
  # Something that should be interrupted if it takes more than 5 seconds...
}

如果发生超时,则会抛出错误:

require 'timeout'
begin
  Timeout::timeout(30) {
    $redis.something
  }
rescue Timeout::Error
  # log error
end

答案 1 :(得分:2)

require "timeout"
begin
  Timeout.timeout(30) do
    $redis.something
  end
rescue => e
  log_it
end