这是我需要的 -
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
请帮我解决这个问题吧。我需要一个计时器才能在指定的时间后触发一个动作。
答案 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