Rad bi vedel, kako lahko v skripti Pythona nastavim časovni zamik.
import time
time.sleep(5) # Delays for 5 seconds. You can also use a float value.
Tukaj je še en primer, kjer se nekaj zažene približno enkrat na minuto:
import time
while True:
print("This prints once a minute.")
time.sleep(60) # Delay for 1 minute (60 seconds).
Uporabite lahko funkcijo sleep()
v modulu time
. Ta funkcija lahko sprejme argument float za ločljivost pod sekundo.
from time import sleep
sleep(0.1) # Time in seconds
Malo zabave z zaspanim generatorjem.
Vprašanje se nanaša na časovni zamik. Lahko je fiksni čas, v nekaterih primerih pa morda potrebujemo zamik, ki se meri od zadnjega časa. Tukaj je ena od možnih rešitev:
Situacija je lahko takšna, da želimo nekaj narediti čim bolj redno in se ne želimo obremenjevati z vsemi stvarmi last_time
, next_time
po vsej naši kodi.
Naslednja koda (sleepy.py) opredeljuje generator 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()
in ga zaženemo, vidimo:
1400102636.46
1400102639.46
1400102642.46
1400102647.47
1400102650.47
Uporabimo ga lahko tudi neposredno v zanki:
import random
for ring in buzzergen(3):
print "now", time.time()
print "ring", ring
time.sleep(random.choice([0, 2, 4, 6]))
Ob zagonu lahko vidimo:
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)
Kot vidimo, ta zvočni signal ni preveč tog in nam omogoča, da nadoknadimo redne intervale spanja, tudi če zaspimo in izstopimo iz rednega urnika.