Dile al programa Ruby que espere un poco de tiempo

418

¿Cómo le dice a un programa Ruby que espere una cantidad arbitraria de tiempo antes de pasar a la siguiente línea de código?

usuario94154
fuente

Respuestas:

675

Me gusta esto:

sleep(num_secs)

El num_secsvalor puede ser un entero o flotante.

Además, si está escribiendo esto dentro de una aplicación Rails, o ha incluido la biblioteca ActiveSupport en su proyecto, puede construir intervalos más largos utilizando la siguiente sintaxis:

sleep(4.minutes)
# or, even longer...
sleep(2.hours); sleep(3.days) # etc., etc.
# or shorter
sleep(0.5) # half a second
rcoder
fuente
122

Usa el sueño así:

sleep 2

Eso dormirá por 2 segundos.

Tenga cuidado de dar una discusión. Si solo corres sleep, el proceso dormirá para siempre. (Esto es útil cuando quieres que un hilo se duerma hasta que se despierte).

Clinton N. Dreisbach
fuente
3
Espera, ¿dormirá para siempre o hasta que se "despierte"? ¿Qué significa "despertar"?
Michael Dorst
44
@anthropomorphic Se refiere a cuando otro hilo llama a Thread # run.
Joshua Pinter
En realidad, supongo que cuando otro hilo llama a Thread # wakeup.
chesterbr
2

Me parece untilmuy útil con el sueño. ejemplo:

> time = Time.now
> sleep 2.seconds until Time.now > time + 10.seconds # breaks when true
Varun Garg
fuente
Esto es lo mismo quesleep(10.seconds)
danielricecodes
Sí, aquí es lo mismo porque usa la misma entrada (tiempo) que ofrece el sueño. Quería resaltar cómo untilse puede usar para dormir hasta que se logre cualquier condición (también me encanta lo natural que se siente la sintaxis)
Varun Garg
1

sleep 6dormirá por 6 segundos. Para una mayor duración, también puede usar sleep(6.minutes)o sleep(6.hours).

vijaya chowdary
fuente
44
No estoy seguro acerca de los votos negativos sobre esto, pero podría ser eso minutes()yhours() son métodos en números agregados por Ruby on Rails, por lo que no está disponible de forma estándar en Ruby, en la clase ActiveSupport :: Duration. Sin embargo, son bastante convenientes.
Jochem Schulenklopper
11
Creo que la razón principal de los votos negativos es que @vijaya_chowdary básicamente volvió a publicar la respuesta correcta votada 8 años después. Consideraría que es extraño al menos ...
StahlRat
1
Voté por eso exactamente. No es el rubí estándar.
hayesk
1

Implementación de segundos / minutos / horas, que son métodos de rieles. Tenga en cuenta que los retornos implícitos no son necesarios, pero se ven más limpios, por lo que los prefiero. No estoy seguro de que Rails tenga .days o si va más allá, pero estos son los que necesito.

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

Después de esto, puede hacer: sleep 5.secondsdormir durante 5 segundos. Tu puedes hacersleep 5.minutes para dormir durante 5 min. Puedes hacerlo sleep 5.hourspara dormir durante 5 horas. Y finalmente, puede sleep 5.daysdormir 5 días ... Puede agregar cualquier método que devuelva el valor de self * (cantidad de segundos en ese período de tiempo). Como ejercicio, ¡intente implementarlo durante meses!

gsb
fuente