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?

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

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).


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

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).


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!

Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.