Je voudrais savoir comment mettre un délai dans un script Python.
import time
time.sleep(5) # Delays for 5 seconds. You can also use a float value.
Voici un autre exemple où quelque chose est exécuté environ une fois par minute :
import time
while True:
print("This prints once a minute.")
time.sleep(60) # Delay for 1 minute (60 seconds).
Vous pouvez utiliser la fonction [sleep()
dans le module time
][1]. Elle peut prendre un argument flottant pour une résolution à la seconde près.
from time import sleep
sleep(0.1) # Time in seconds
Un peu d'amusement avec un [générateur][1] endormi.
La question porte sur la temporisation. Il peut s'agir d'un temps fixe, mais dans certains cas, nous pouvons avoir besoin d'un délai mesuré depuis la dernière fois. Voici une solution possible :
La situation peut être la suivante : on veut faire quelque chose aussi régulièrement que possible et on ne veut pas s'embêter avec tous les trucs last_time
, next_time
tout autour de notre code.
Le code suivant (sleepy.py) définit un générateur 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
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()
Et en l'exécutant, on voit :
1400102636.46
1400102639.46
1400102642.46
1400102647.47
1400102650.47
Nous pouvons aussi l'utiliser directement dans une boucle :
import random
for ring in buzzergen(3):
print "now", time.time()
print "ring", ring
time.sleep(random.choice([0, 2, 4, 6]))
Et en l'exécutant, nous pourrions voir :
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)
Comme nous le voyons, ce buzzer n'est pas trop rigide et nous permet de rattraper les intervalles réguliers de sommeil même si nous nous endormons trop et sortons de l'horaire régulier.