3

我希望创建一个最多运行一段时间的 Ruby (MRI 1.9.3) 循环,一旦该时间结束,它就会进入循环的下一次迭代。

例如,这就是我希望实现的目标:

timer = Timer.new
while foo
  timer.after 5 do # The loop on foo only gets to run for 5 seconds
    next
  end

  # Do some work here
end

到目前为止,我发现了名为 Timers ( https://github.com/tarcieri/timers ) 的 tarcieri 的 gem,这是我在上面的代码中试图模拟的,但我的实现并没有给出我期望的行为,如果我的工作需要更长的时间,那么循环将在 5 秒后进入下一次迭代。有任何想法吗?

4

3 回答 3

12
require 'timeout'
timeout_in_seconds = 5
while foo
  begin
    Timeout.timeout(timeout_in_seconds) do
      # Do some work here
    end
  rescue Timeout::Error
    next
  end
end
于 2012-08-28T14:49:52.387 回答
2

自从我刷掉我的 Ruby 技能已经有一段时间了,但我相信你可以使用 timeout 库来做到这一点。

require 'timeout'

while foo
    Timeout.timeout(5) do
        work()
    end
end
于 2012-08-28T14:50:51.463 回答
0

你也可以试试这个:

time = 60
time_start = Time.now
begin      
      time_running = Time.now - time_start
      #You_code_goes_here
end until (time_running.to_i >= time)

该循环将一直发生,直到time_runningvar 等于或大于“60”。

于 2016-06-10T22:44:50.747 回答