告诉 Ruby 程序等待一段时间

Posted

技术标签:

【中文标题】告诉 Ruby 程序等待一段时间【英文标题】:Tell Ruby Program to Wait some amount of time 【发布时间】:2010-11-22 17:34:00 【问题描述】:

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

【问题讨论】:

【参考方案1】:

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

【讨论】:

这和sleep(10.seconds)是一回事 是的,这里是一样的,因为它使用与 sleep 相同的输入(时间)。我想强调until 是如何用来睡觉的,直到达到任何条件(也喜欢语法的自然感觉) 这让我头疼。您能否提供一个与此不同的示例来展示在此处使用until 而不仅仅是sleep(10.seconds) 的价值? 假设你想阻塞直到请求返回:sleep 1.seconds until !req.loading 这与 sleep(10) 不完全相同。内核可能会提前唤醒线程。因此,如果您必须至少睡 10 秒,则需要这样的构造。见apidock.com/ruby/Kernel/sleep【参考方案2】:

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

【讨论】:

这里写的是 (sin²?+cos²?) 而不是 1。【参考方案3】:

这样

sleep(no_of_seconds)

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

sleep(5.seconds)

sleep(5.minutes)

sleep(5.hours)

sleep(5.days)

【讨论】:

【参考方案4】:

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

【讨论】:

【参考方案5】:

像这样:

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

【讨论】:

【参考方案6】:

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

【讨论】:

不确定对此的反对意见,但可能是 minutes()hours() 是 Ruby on Rails 添加的数字方法 - 因此在 Ruby 中不是标准可用 - 在 ActiveSupport::时长类。不过它们很​​方便。 我认为投反对票的主要原因是@vijaya_chowdary 基本上在 8 年后重新发布了投票的正确答案。我认为这至少很奇怪...... 我对此投了反对票。这不是标准的红宝石。【参考方案7】:

像这样使用sleep:

sleep 2

它会休眠 2 秒。

小心地给出一个论点。如果你只是运行sleep,进程将永远休眠。 (当您希望线程休眠直到唤醒时,这很有用。)

【讨论】:

等等,它会永远沉睡,还是直到它“醒来”? “醒”到底是什么意思? @anthropomorphic 指的是另一个线程调用Thread#run的时候。 其实我猜是当另一个线程调用Thread#wakeup的时候。

以上是关于告诉 Ruby 程序等待一段时间的主要内容,如果未能解决你的问题,请参考以下文章

c#编写的winform的时候怎么让程序等待一段时间~!

使用 Appium 和 Ruby 测试 iOS 应用程序时等待元素加载?

如何让程序等待一段时间? [复制]

如何在等待一段时间后进行程序python [重复]

如何让Qt 的程序等待一段时间

使用c++在mac上使用sleep函数告诉程序等待0.1毫秒