処理にかかった時間を得て、最低時間に満たなかったら足りない分を sleep させる
例
def some_action
# some action
end
start_time = Time.now.to_f
some_action
done_time = Time.now.to_f
under_time = 0.1
diff_time = under_time - (done_time - start_time)
sleep diff_time if diff_time.positive? }
ベンチマークの例
require 'benchmark'
[*1..10].map { Benchmark.realtime { start_time = Time.now.to_f; sleep rand(0.01..0.10); done_time = Time.now.to_f; under_time = 0.1; diff_time = under_time - (done_time - start_time); sleep diff_time if diff_time.positive?; } }
# => [0.10333599988371134,
0.10502699995413423,
0.10417600022628903,
0.10169599996879697,
0.1034500002861023,
0.10172299994155765,
0.10186100006103516,
0.10312700038775802,
0.10354600008577108,
0.10065300017595291]
Original by Github issue
チャットメンバー募集
何か質問、悩み事、相談などあればLINEオープンチャットもご利用ください。