16

我想找到一种方法来设置 ruby​​ 代码的时间限制,以便在该时间限制到期后退出。

4

1 回答 1

25

我不确定为什么这个问题被否决,使用timeout模块非常简单。

这使您可以传递一个块和一个时间段。如果块在时间段内完成,则返回该值。否则抛出异常。示例使用:

require 'timeout'

def run
  begin
    result = Timeout::timeout(2) do
      sleep(1 + rand(3))
      42
    end
    puts "The result was #{result}"
  rescue Timeout::Error
    puts "the calculation timed out"
  end
end

正在使用:

2.0.0p0 :005 > load 'test.rb'
 => true
2.0.0p0 :006 > run
the calculation timed out
 => nil
2.0.0p0 :007 > run
the calculation timed out
 => nil
2.0.0p0 :008 > run
The result was 42
 => nil
于 2013-05-09T04:39:06.120 回答