我正在寻找创建一个最多运行一段时间的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秒后进入下一次迭代的循环。有什么想法吗?
答案 0 :(得分:10)
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
答案 1 :(得分:1)
自从我刷掉我的Ruby技能以来已经有一段时间了,但我相信你可以使用超时库来做到这一点。
require 'timeout'
while foo
Timeout.timeout(5) do
work()
end
end
答案 2 :(得分: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
var等于或大于“60”之前发生。