我爲基準的執行時間的方法休息,如果方法需要超過30秒的時間來執行
tests.each do |test|
time = Benchmark.realtime { method(test) }
end
def method(test)
code
end
以秒爲單位
返回時間但我要的是打破循環,如果這種方法執行時間超過30秒。
建議一個乾淨的方式來做到這一點。
我爲基準的執行時間的方法休息,如果方法需要超過30秒的時間來執行
tests.each do |test|
time = Benchmark.realtime { method(test) }
end
def method(test)
code
end
以秒爲單位
返回時間但我要的是打破循環,如果這種方法執行時間超過30秒。
建議一個乾淨的方式來做到這一點。
您可以使用Ruby Timeout方法
require 'timeout'
tests.each do |test|
Timeout::timeout(30) {
method(test)
}
end
試試這個:
tests.each do |test|
time = Benchmark.realtime { method(test) }
break if time > 30
end
不確定的time
單位。根據這個調整條件time > 30
。
太糟糕了OP沒有指定他是否想要實際上中斷了這個方法,或者只是在事實之後跳出循環。 :/ – AnoE
使用STDLIB Timeout
require 'timeout'
def method(test)
Timeout::timeout(30){
#code here
}
end
這將提高Timeout::TimeoutError
如果代碼需要運行較長時間
你已經得到了幾個答案,特別是一些關於Timeout
。
請注意這裏。 Timeout
與標準紅寶石報警信號來實現(即,我不是在談論的JRuby在這裏),這意味着
如果可以的話,自己總是會更安全一些。也就是說,如果可以的話,請讓你的method
檢查定期花費的時間。當然,這對你可能有用也可能沒用。你不想把測試內容帶入你的生產代碼。如果您想暫停系統調用(例如阻止網絡呼叫),可能很難。
至少要記住。
使用'超時':http://ruby-doc.org/stdlib-2.3.1/libdoc/timeout/rdoc/Timeout.html –
謝謝,它真的有幫助 –