如何告诉Ruby程序在继续下一行代码之前等待任意数量的时间?
像这样使用睡眠:
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
我发现直到对睡眠很有用。例子:
> 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
之后,你可以这样做: 睡眠5。秒睡5秒。你可以睡5分钟。睡5分钟。你可以做到睡5分钟。小时睡5个小时。最后,你可以睡5分钟。天要睡5天…您可以添加任何返回self *值(该时间框架中的秒数)的方法。 作为练习,试着执行它几个月!
这是一个在sidekiq中使用sleep的例子
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秒钟,然后打印出“工作非常努力”。
推荐文章
- Ruby中没有增量操作符(++)?
- 如何得到一个特定的输出迭代哈希在Ruby?
- Ruby正则表达式中\A \z和^ $的区别
- __FILE__在Ruby中是什么意思?
- Paperclip::Errors::MissingRequiredValidatorError with Rails
- Ruby:如何将散列转换为HTTP参数?
- 在ROR迁移期间,将列类型从Date更改为DateTime
- 把一个元素推到数组开头最简单的方法是什么?
- ActiveRecord:大小vs计数
- Ruby的dup和克隆方法有什么区别?
- 我怎么才能跳出露比·普利的怪圈?
- Rails:在大数字中添加逗号有Rails技巧吗?
- 如何升级红宝石
- 如何找到包含匹配值的哈希键
- 如何在Rails中找到当前的路由?