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

标签 ruby loops timer

我希望创建一个最多运行一定时间的 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 的 gem,称为 Timers ( https://github.com/tarcieri/timers ),这是我在上面的代码中试图模拟的,但我的实现没有给出我期望的行为,这是循环如果我的工作花费的时间比这更长,则在 5 秒后转到下一次迭代。有什么想法吗?

最佳答案

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

关于ruby - 有没有一种方法可以编写一个 Ruby 循环,该循环在最大设定时间内运行一次迭代?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12161783/

相关文章:

ruby - 我该如何解析这个

ruby-on-rails - 你会如何用 Ruby 设计这样的 DSL?

c - 如何根据C中的循环索引访问任意变量名

swift - 如何防止 for 循环每秒触发 10 次以上?

mysql - 无法安装 do_mysql gem?

python for循环只执行一次?

java - 我很难确定 Loop While DO 的作用范围

timer - 带中断的 Uboot 定时器

java - Android - 无法以编程方式删除 Wifi 网络 - WifiManager 类型中的方法 removeNetwork(int) 不适用于参数(字符串)

ruby - 如何更改数组的一些随机元素