告诉Ruby程序等待一段时间

时间:2009-08-25 18:07:42

标签: ruby sleep

如何告诉Ruby程序在继续下一行代码之前等待一段任意时间?

7 个答案:

答案 0 :(得分:594)

像这样:

sleep(num_secs)

num_secs值可以是整数或浮点数。

此外,如果您在Rails应用程序中编写此代码,或者在项目中包含ActiveSupport库,则可以使用以下便捷语法构建更长的时间间隔:

sleep(4.minutes)
# or, even longer...
sleep(2.hours); sleep(3.days) # etc., etc.
# or shorter
sleep(0.5) # half a second

答案 1 :(得分:109)

像这样使用sleep

sleep 2

那会睡2秒钟。

小心提出一个论点。如果您只是运行sleep,该过程将永远休眠。 (当你想让一个线程睡醒直到它被唤醒时,这很有用。)

答案 2 :(得分:2)

sleep 6将睡6秒钟。如果持续时间较长,您还可以使用sleep(6.minutes)sleep(6.hours)

答案 3 :(得分:1)

秒/分钟/小时的实现,这是轨道方法。请注意,不需要隐式返回,但是它们看起来更干净,所以我更喜欢它们。我不确定Rails甚至还有.days或它是否走得更远,但这是我需要的。

class Integer
   def seconds
      return self
   end
   def minutes
      return self * 60
   end
   def hours
      return self * 3600
   end
   def days
      return self * 86400
   end
end

在此之后,您可以执行以下操作: sleep 5.seconds睡眠5秒钟。您可以sleep 5.minutes睡觉5分钟。您可以sleep 5.hours睡觉5个小时。最后,您可以sleep 5.days睡眠5天...您可以添加任何返回self *(在该时间范围内的秒数)值的方法。 作为练习,请尝试实施几个月!

答案 4 :(得分:1)

sleep(no_of_seconds)

或者您可以传递其他可能的参数,例如:

sleep(5.seconds)

sleep(5.minutes)

sleep(5.hours)

sleep(5.days)

答案 5 :(得分:0)

我发现until对于睡眠非常有用。例如:

> time = Time.now
> sleep 2.seconds until Time.now > time + 10.seconds # breaks when true

答案 6 :(得分:-1)

这是将 sleepsidekiq 结合使用的示例

require 'sidekiq'

class PlainOldRuby
  include Sidekiq::Worker

  def perform(how_hard="super hard", how_long=10)
    sleep how_long
    puts "Workin' #{how_hard}"
  end
end

睡眠 10 秒并打印出 "Working super hard" .