在ruby中使用计时器重试

时间:2016-06-24 06:37:23

标签: ruby timer

我想在ruby中进行重试操作,区别很小:我想用计时器来做,可能没有例外。计时器应该测量所有尝试的时间

这是一个没有一个例子的例子,但是它使用“rescue”,这意味着它假定会有一个例外,而在我的代码中可能没有一个。

retry_count = 5
begin
  #something
rescue
  retry_count -= 1
  if retry_count > 0
    retry
  end
end

我的目标只是确保我所做的所有尝试都不会超过一段时间。

请注意#something是一个IO操作,可能会在不同的尝试中花费不同的时间。

如何在此处正确引入计时器,以便我不仅可以检查重试计数,还可以检查某段时间尚未通过?

1 个答案:

答案 0 :(得分:2)

retry_count = 5
timeslice = 3 # sec
begin
  started = Time.now
  #something
rescue
  retry_count -= 1
  if retry_count > 0
    sleep [timeslice - (Time.now - started), 0].max
    # or, alternatively:
    # time_left = timeslice - (Time.now - started)
    # sleep timeleft if timeleft > 0
    retry
  end
end