¿Cómo puedo hacer un retardo en Python?

Me gustaría saber cómo poner un retardo de tiempo en un script de Python.

import time
time.sleep(5)   # Delays for 5 seconds. You can also use a float value.

Aquí hay otro ejemplo en el que se ejecuta algo aproximadamente una vez por minuto:

import time
while True:
    print("This prints once a minute.")
    time.sleep(60) # Delay for 1 minute (60 seconds).
Comentarios (8)

Puedes utilizar la función sleep() del módulo time. Puede tomar un argumento float para la resolución de sub-segundos.

from time import sleep
sleep(0.1) # Time in seconds
Comentarios (0)

Un poco de diversión con un [generador] dormido1.

La pregunta es sobre el tiempo de retardo. Puede ser un tiempo fijo, pero en algunos casos podríamos necesitar un retardo medido desde la última vez. Aquí hay una posible solución:

Retraso medido desde la última vez (despertando regularmente)

La situación puede ser, que queramos hacer algo con la mayor regularidad posible y no queramos molestarnos con todas las cosas de last_time, next_time por todo nuestro código.

Generador de zumbidos

El siguiente código (sleepy.py) define un generador de buzzergen:

import time
from itertools import count

def buzzergen(period):
    nexttime = time.time() + period
    for i in count():
        now = time.time()
        tosleep = nexttime - now
        if tosleep > 0:
            time.sleep(tosleep)
            nexttime += period
        else:
            nexttime = now + period
        yield i, nexttime

Invocar buzzergen regular

from sleepy import buzzergen
import time
buzzer = buzzergen(3) # Planning to wake up each 3 seconds
print time.time()
buzzer.next()
print time.time()
time.sleep(2)
buzzer.next()
print time.time()
time.sleep(5) # Sleeping a bit longer than usually
buzzer.next()
print time.time()
buzzer.next()
print time.time()

Y ejecutándolo vemos

1400102636.46
1400102639.46
1400102642.46
1400102647.47
1400102650.47

También podemos usarlo directamente en un bucle:

import random
for ring in buzzergen(3):
    print "now", time.time()
    print "ring", ring
    time.sleep(random.choice([0, 2, 4, 6]))

Y ejecutándolo podríamos ver

now 1400102751.46
ring (0, 1400102754.461676)
now 1400102754.46
ring (1, 1400102757.461676)
now 1400102757.46
ring (2, 1400102760.461676)
now 1400102760.46
ring (3, 1400102763.461676)
now 1400102766.47
ring (4, 1400102769.47115)
now 1400102769.47
ring (5, 1400102772.47115)
now 1400102772.47
ring (6, 1400102775.47115)
now 1400102775.47
ring (7, 1400102778.47115)

Como vemos, este timbre no es demasiado rígido y nos permite ponernos al día con los intervalos regulares de sueño aunque nos quedemos dormidos y nos salgamos del horario regular.

Comentarios (0)