我对方法
的执行时间进行了基准测试tests.each do |test|
time = Benchmark.realtime { method(test) }
end
def method(test)
code
end
以秒为单位的返回时间
但我想要的是,如果这个方法的执行时间超过30秒,就会打破循环。
建议一个干净的方法来做。
答案 0 :(得分:3)
使用stdlib Timeout
require 'timeout'
def method(test)
Timeout::timeout(30){
#code here
}
end
如果代码运行时间更长,则会引发Timeout::TimeoutError
答案 1 :(得分:1)
您可以使用Ruby Timeout方法
require 'timeout'
tests.each do |test|
Timeout::timeout(30) {
method(test)
}
end
答案 2 :(得分:1)
您已经获得了多个答案,特别是有关Timeout
的答案。
请谨慎。 method
是用标准ruby中的ALARM信号实现的(即我这里不是在讨论JRuby),这意味着
如果可以,以某种方式自行完成超时总是更安全。也就是说,如果可以,那么请: integer expression expected
: integer expression expected
OK: 3
检查定期花费的时间。当然,这可能对你有用,也可能没用;您不想将测试内容带入您的生产代码中。如果你想超时系统调用(例如,阻止网络调用),可能会很难。
至少,记住它。
答案 3 :(得分:-2)
试试这个:
tests.each do |test|
time = Benchmark.realtime { method(test) }
break if time > 30
end
不确定time
的单位。根据该条件调整条件time > 30
。