Eu gostaria de saber como colocar um tempo de atraso em um script Python.
import time
time.sleep(5) # Delays for 5 seconds. You can also use a float value.
Aqui está outro exemplo onde algo é executado aproximadamente uma vez por minuto:
import time
while True:
print("This prints once a minute.")
time.sleep(60) # Delay for 1 minute (60 seconds).
Você pode utilizar a função sleep()
no módulo time
. Pode pegar um argumento de flutuação para a resolução de subsegundos.
from time import sleep
sleep(0.1) # Time in seconds
Um pouco de diversão com um [gerador] adormecido1.
A questão é sobre o tempo de atraso. Pode ser um tempo fixo, mas em alguns casos podemos precisar de um atraso medido desde a última vez. Aqui está uma solução possível:
A situação pode ser, nós queremos fazer algo o mais regularmente possível e não queremos nos incomodar com todas as coisas do last_time
, next_time
ao redor do nosso código.
O seguinte código (**sleepy.py***) define um gerador 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
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()
E a correr, nós vemos:
1400102636.46
1400102639.46
1400102642.46
1400102647.47
1400102650.47
Também podemos usá-lo diretamente em um loop:
import random
for ring in buzzergen(3):
print "now", time.time()
print "ring", ring
time.sleep(random.choice([0, 2, 4, 6]))
E correndo, podemos 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, esta campainha não é muito rígida e permite-nos alcançar intervalos regulares de sono, mesmo que adormeçamos demais e saiamos do horário regular.