我有一个redis通话,由于网络问题可能需要很长时间,直到通话超时。 redis电话并不重要。
有没有办法用一些东西来包装那个调用,这个东西会检查它需要多长时间以及是否需要太长时间才能跳过调用(并且可能会调用其他方法来记录它)?
类似
check_time(30.seconds) do
$redis.something
if error
log it
end
end
答案 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