Ruby中有什么类似Timer的东西吗?

时间:2015-02-18 06:44:04

标签: ruby-on-rails ruby timer

这是我需要的 -

def get_file_from_web()
    # This is a function which retries the following function when that function is not completed with in 1 min.
    timer(60)
    # This method is use to connect to internet and get the file specified and i should not take more than 1 min. 
    file = get_file()
end

请帮我解决这个问题吧。我需要一个计时器才能在指定的时间后触发一个动作。

1 个答案:

答案 0 :(得分:0)

此代码将尝试在失败前获取文件3次。 get_file方法包含在Timeout.timeout块中,如果完成时间超过60秒,则会引发Timeout::Error。如果引发超时错误,我们要么重试操作,要么重新引发错误,具体取决于是否还有更多的重试。

require 'timeout'

def get_file_from_web
  retries = 3
  begin
    Timeout.timeout(60) { get_file() }
  rescue Timeout::Error
    if (retries -= 1) > 0
      retry 
    else
      raise
    end
  end
end

您还可以使用retryable来减少所需的代码量。

require 'timeout'

def get_file_from_web
  Retryable.retryable(tries: 3, on: Timeout::Error) do
    Timeout.timeout(60) { get_file() }
  end
end