告诉Ruby程序等待一段时间

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

412507 次浏览

像这样使用睡眠:

sleep 2

它会休眠2秒。

提出论点时要小心。如果你只是运行sleep,进程将永远处于睡眠状态。(当你想让线程休眠直到被唤醒时,这很有用。)

是这样的:

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

sleep 6将休眠6秒。对于较长时间,你也可以使用sleep(6.minutes)sleep(6.hours)

我发现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

实现秒/分/小时,这是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 *值(该时间框架中的秒数)的方法。 作为练习,试着执行它几个月!< / p >

像这样

sleep(no_of_seconds)

或者你可以传递其他可能的参数,比如:

sleep(5.seconds)

sleep(5.minutes)

sleep(5.hours)

sleep(5.days)

这是一个使用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"