有没有一种方法可以编写一个Ruby循环,使其在最大设置时间内运行一次迭代?

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

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

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

2

我已经有一段时间没有使用Ruby技能了,但是我相信你可以使用timeout库来完成这个任务。

require 'timeout'

while foo
    Timeout.timeout(5) do
        work()
    end
end

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_running变量等于或大于"60"。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接