Kako lahko v Pythonu ustvarim časovni zamik?

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).
Komentarji (8)

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
Komentarji (0)

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:

Zakasnitev, izmerjena od zadnjega časa (redno prebujanje)

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.

Generator zvočnega signala

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

Priklic običajnega buzzergena

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.

Komentarji (0)