457

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

4

7 回答 7

745

像这样:

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
于 2009-08-25T18:12:29.210 回答
135

像这样使用睡眠:

sleep 2

那会睡2秒。

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

于 2009-08-25T18:11:10.057 回答
8

我发现until睡眠非常有用。例子:

> time = Time.now
> sleep 2.seconds until Time.now > time + 10.seconds # breaks when true
> # or
> sleep 2 and puts 'still sleeping' until Time.now > time + 10
> # or
> sleep 1.seconds until !req.loading # suggested by ohsully
于 2019-06-04T14:41:43.170 回答
3

像这样

sleep(no_of_seconds)

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

sleep(5.seconds)

sleep(5.minutes)

sleep(5.hours)

sleep(5.days)

于 2020-08-21T15:30:05.467 回答
2

秒/分钟/小时的实现,这是 rails 方法。请注意,不需要隐式返回,但它们看起来更干净,所以我更喜欢它们。我不确定 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 * 值的方法(该时间范围内的秒数)。作为练习,尝试实施几个月!

于 2020-02-01T23:14:07.677 回答
0

sleep 6将睡眠 6 秒。对于更长的持续时间,您还可以使用sleep(6.minutes)sleep(6.hours)

于 2017-07-29T13:18:28.627 回答
-1

这是一个使用sleepwith的例子sidekiq

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"

于 2021-02-23T02:50:15.593 回答