2013-12-17 30 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