2013-12-17 15 views
1

由于网络问题,我有一个redis调用可能需要很长时间,直到调用超时。这个redis呼叫并不重要。如果方法时间太长,如何跳过

有没有办法将这个调用换成什么东西来检查它需要多长时间以及是否需要太长的时间才能跳过调用(也可以调用其他一些方法来记录)?

check_time(30.seconds) do 
$redis.something 

if error 
    log it 
end 
end 

回答

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 
+0

超时是要走的路......但要[小心](HTTPS:/ /coderwall.com/p/1novga),请注意,redis-rb接受超时选项[也](https://github.com/redis/redis-rb/blob/master/lib/redis.rb) – mestachs

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