告诉Ruby程序等待一段时间


417

您如何告诉Ruby程序等待任意时间再进入下一行代码?

Answers:


675

像这样:

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

122

像这样使用睡眠

sleep 2

那会睡2秒钟。

提个论点要小心。如果您仅运行sleep,则该过程将永远休眠。(这在您希望线程在唤醒之前一直处于睡眠状态时很有用。)


3
等待,它会永远睡着,还是直到它被“唤醒”?“唤醒”是什么意思?
迈克尔·多斯特

4
@anthropomorphic它是指另一个线程何时调用Thread#run。
约书亚·品特

实际上,我想当另一个线程调用Thread#wakeup时。
chesterbr 2014年

2

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

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

这与sleep(10.seconds)
danielricecodes

是的,这里是一样的,因为它使用与睡眠提供的相同的输入(时间)。我想强调一下如何until在达到任何条件之前就可以睡觉(也喜欢语法的自然感觉)
Varun Garg

1

sleep 6会睡6秒钟。对于更长的时间,您也可以使用sleep(6.minutes)sleep(6.hours)


4
不知道关于这个downvotes,但它可能是minutes()hours()上on Rails的Ruby的通过添加NUMERICS方法-所以不提供标准Ruby中-中的ActiveSupport :: Duration类。他们很方便。
Jochem Schulenklopper

11
我认为拒绝投票的主要原因是@vijaya_chowdary基本上在8年后重新发布了投票的正确答案。我至少认为这很奇怪...
StahlRat

1
我为此投票。这不是标准的红宝石。
hayesk

1

实现秒/分钟/小时,这是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 *(在该时间范围内的秒数)值的方法。作为练习,请尝试实施几个月!

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.