Rubyプログラムにしばらく待機するように指示する


418

Rubyプログラムに次のコード行に進む前に任意の時間待機するように指示するにはどうすればよいですか?

回答:


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
待って、それは永遠に眠るのか、それとも「目覚める」まで?「目覚めた」とはどういう意味ですか?
Michael Dorst、2013

4
@anthropomorphicこれは、別のスレッドがThread#runを呼び出すときを指します。
Joshua Pinter 2013

実際、別のスレッドがThread#wakeupを呼び出したと思います。
chesterbr

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 66秒間スリープします。より長い期間、sleep(6.minutes)またはを使用することもできますsleep(6.hours)


4
わからないこの上downvotesについて、それがいるかもしれませんminutes()し、hours()Rubyで利用できるので、標準ではない- - activesupportの::継続クラスにはRuby on Railsで追加された数値の方法があります。彼らはしかし非常に便利です。
Jochem Schulenklopper 2017

11
反対票の主な理由は、@ vijaya_chowdaryが基本的に投票した正解を8年後に再投稿したことです。私はそれが少なくとも奇妙だと
思い

1
私はまさにそのことに反対票を投じた。標準のルビではありません。
Hayesk 2018

1

秒/分/時間の実装。これはレール方式です。暗黙の戻り値は必要ありませんが、見た目がきれいなので注意してください。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.seconds5秒間スリープする。sleep 5.minutes5分間寝ることができます。あなたはsleep 5.hours5時間眠ることができます。そして最後に、sleep 5.days5日間スリープすることができます... self *(そのタイムフレームの秒数)の値を返す任意のメソッドを追加できます。演習として、何ヶ月も実装してみてください!

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.