Ruby中的超时模块 - 获取计时器值

时间:2017-03-22 16:49:31

标签: ruby-on-rails ruby

有没有办法让#34;计时器"在Ruby中运行Timeout模块时的值?说我有这段代码:

require 'timeout'
begin
  status = Timeout::timeout(180) {
    sleep(10) until some action
  }
rescue Timeout::Error
  puts 'That took too long, exiting...'
end

所以我想要的是每次迭代后我等待的总时间的总值。因此,在前10秒后,我等了10秒,在第二次10秒后,我等了20秒,依此类推。

我如何获得整体价值?

1 个答案:

答案 0 :(得分:1)

超时仅产生总秒数,所以这里是一个如何得到它的例子:

Timeout::timeout 5 do |sec|
  puts sec # => prints 5
  sleep 2
  puts sec # => prints 5
end

因此,要实现“整体”价值(从一开始就浪费时间),我认为你必须做这样的事情:

Timeout::timeout 5 do |sec|
  start = Time.now
  puts (Time.now - start).round # => prints 0
  sleep 2
  puts (Time.now - start).round # => prints 2
end

我不知道是否有更好的方法可以做到这一点,但这很有效。