我已经为要计时的功能设置了计时器,但希望在满足条件后将其重置
timestart = Time.now
Individual.all.each do |f|
endtime = Time.now
timer = (endtime - timestart)
puts timer #places the time it takes for each loop
if checktime == 1 then
###Apply new {timestart = Time.now} HERE?###
end
end
所以在上面的示例中,我希望我的计时器在1分钟后重置
答案 0 :(得分:2)
这是您使用yield
清理主要方法的方式
@timestart = Time.now
def one_min_check
start_time = Time.now
yield
end_time = Time.now
puts "Something took #{end_time - start_time} to run"
if end_time - @timestart >= 60.0
@timestart = end_time
puts "Took 1 minute or longer. Reset 1 min at #{@timestart}"
end
end
Individual.all.each do |f|
one_min_check do
#do stuff with f
end
end
但是,为什么不只是用户基准测试呢?
require 'benchmark'
Individual.all.each do |f|
puts Benchmark.measure do
#do stuff with f
end
end
答案 1 :(得分:2)
您的问题的答案可能是:一分钟后以类似于Rails的简单方式重置:
timestart = Time.now
Individual.all.each do |f|
endtime = Time.now
timer = (endtime - timestart)
puts timer #places the time it takes for each loop
if timestart < 1.minute.ago
timestart = Time.now
end
end
但是,如果我们了解您为什么要以此基准对循环进行基准测试,则可能会更有帮助。为什么要每分钟重置一次计时器?
您也有此评论:places the time it takes for each loop
。这在您的代码中并不完全正确,因为您没有在每个循环中重置timestart。假设循环需要1秒。第一次迭代timer
将是“ 1秒”。即使循环迭代只花了一秒钟,第二次timer
也将是“ 2秒”。
但是您可能有自己的理由:)
答案 2 :(得分:0)
您可以计算出来。
quantity = Individual.all.count
time = Benchmark.measure { Post.all }
time_per_each = time / quantity.to_f
您得到的答案以毫秒为单位,只需转换即可。
希望对您有帮助。
答案 3 :(得分:0)
自己弄清楚了:)
刚刚放置
timestart = Time.now
在条件之间循环。不得不稍微更改代码以保持时间,但是计时器会在下一个循环的那一刻重置:->
真的很容易
答案 4 :(得分:0)
如果我对您尝试做的事情的理解是正确的:
timestart = Time.now
Individual.all.each do |f|
puts Time.now-timestart #places the time it takes for each loop
if Time.now-timestart < 60 # or some other condition of your choice
timestart = Time.now
end
end
应该很好地完成工作...
但是实际上,它不会在每个循环上重置timestart