Vorrei sapere come mettere un ritardo in uno script Python.
import time
time.sleep(5) # Delays for 5 seconds. You can also use a float value.
Ecco un altro esempio in cui qualcosa viene eseguito circa una volta al minuto:
import time
while True:
print("This prints once a minute.")
time.sleep(60) # Delay for 1 minute (60 seconds).
Potete usare la funzione sleep()
nel modulo time
. Può prendere un argomento float per una risoluzione al sub-secondo.
from time import sleep
sleep(0.1) # Time in seconds
Un po' di divertimento con un generatore assonnato.
La domanda riguarda il ritardo temporale. Può essere un tempo fisso, ma in alcuni casi potremmo aver bisogno di un ritardo misurato dall'ultima volta. Ecco una possibile soluzione:
La situazione può essere che vogliamo fare qualcosa il più regolarmente possibile e non vogliamo preoccuparci di tutta la roba last_time
, next_time
intorno al nostro codice.
Il seguente codice (sleepy.py) definisce un generatore di 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()
Ed eseguendolo vediamo:
1400102636.46
1400102639.46
1400102642.46
1400102647.47
1400102650.47
Possiamo anche usarlo direttamente in un ciclo:
import random
for ring in buzzergen(3):
print "now", time.time()
print "ring", ring
time.sleep(random.choice([0, 2, 4, 6]))
Ed eseguendolo potremmo vedere:
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)
Come vediamo, questo cicalino non è troppo rigido e ci permette di recuperare gli intervalli di sonno regolari anche se dormiamo troppo e usciamo dal programma regolare.