1
由于网络问题,我有一个redis调用可能需要很长时间,直到调用超时。这个redis呼叫并不重要。如果方法时间太长,如何跳过
有没有办法将这个调用换成什么东西来检查它需要多长时间以及是否需要太长的时间才能跳过调用(也可以调用其他一些方法来记录)?
像
check_time(30.seconds) do
$redis.something
if error
log it
end
end
由于网络问题,我有一个redis调用可能需要很长时间,直到调用超时。这个redis呼叫并不重要。如果方法时间太长,如何跳过
有没有办法将这个调用换成什么东西来检查它需要多长时间以及是否需要太长的时间才能跳过调用(也可以调用其他一些方法来记录)?
像
check_time(30.seconds) do
$redis.something
if error
log it
end
end
你可以使用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
require "timeout"
begin
Timeout.timeout(30) do
$redis.something
end
rescue => e
log_it
end
超时是要走的路......但要[小心](HTTPS:/ /coderwall.com/p/1novga),请注意,redis-rb接受超时选项[也](https://github.com/redis/redis-rb/blob/master/lib/redis.rb) – mestachs