Ich würde gerne wissen, wie man eine Zeitverzögerung in ein Python-Skript einfügt.
import time
time.sleep(5) # Delays for 5 seconds. You can also use a float value.
Hier ist ein weiteres Beispiel, bei dem etwas etwa einmal pro Minute ausgeführt wird:
import time
while True:
print("This prints once a minute.")
time.sleep(60) # Delay for 1 minute (60 seconds).
Sie können die Funktion sleep()
im Modul time
verwenden. Sie kann ein Float-Argument für eine Sub-Sekunden-Auflösung annehmen.
from time import sleep
sleep(0.1) # Time in seconds
Ein bisschen Spaß mit einem verschlafenen Generator.
Die Frage bezieht sich auf die Zeitverzögerung. Es kann eine feste Zeit sein, aber in einigen Fällen brauchen wir vielleicht eine Verzögerung, die seit dem letzten Mal gemessen wird. Hier ist eine mögliche Lösung:
Die Situation kann so aussehen, dass wir etwas so regelmäßig wie möglich machen wollen und wir wollen uns nicht mit dem ganzen last_time
, next_time
Zeug in unserem Code herumärgern.
Der folgende Code (sleepy.py) definiert einen buzzergen
Generator:
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()
Und wenn wir es ausführen, sehen wir:
1400102636.46
1400102639.46
1400102642.46
1400102647.47
1400102650.47
Wir können es auch direkt in einer Schleife verwenden:
import random
for ring in buzzergen(3):
print "now", time.time()
print "ring", ring
time.sleep(random.choice([0, 2, 4, 6]))
Und wenn wir es ausführen, sehen wir vielleicht:
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)
Wie wir sehen, ist dieser Buzzer nicht zu starr und ermöglicht es uns, regelmäßige Schlafintervalle einzuhalten, selbst wenn wir verschlafen und aus dem regulären Zeitplan geraten.