Vēlos uzzināt, kā Python skriptu ievietot laika kavēšanos.
import time
time.sleep(5) # Delays for 5 seconds. You can also use a float value.
Šeit ir vēl viens piemērs, kur kaut kas tiek palaists aptuveni reizi minūtē:
import time
while True:
print("This prints once a minute.")
time.sleep(60) # Delay for 1 minute (60 seconds).
Jūs varat izmantot sleep()
funkciju time
modulī. Tā var pieņemt float argumentu, lai iegūtu izšķirtspēju, kas ir mazāka par sekundi.
from time import sleep
sleep(0.1) # Time in seconds
Nedaudz jautrības ar miegainu ģeneratoru.
Jautājums ir par laika kavēšanos. Tas var būt fiksēts laiks, bet dažos gadījumos mums var būt nepieciešama aizkave, kas mērīta kopš pēdējā laika. Šeit ir viens no iespējamiem risinājumiem:
Situācija var būt tāda, ka mēs vēlamies kaut ko darīt pēc iespējas regulārāk un nevēlamies apgrūtināt sevi ar visām pēdējā_laika
, nākamā_laika
lietām, kas izvietotas visā mūsu kodā.
Nākamais kods (sleepy.py) definē buzzergen
ģeneratoru:
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()
Un palaižot to, mēs redzam:
1400102636.46
1400102639.46
1400102642.46
1400102647.47
1400102650.47
Mēs varam to izmantot arī tieši cilpā:
import random
for ring in buzzergen(3):
print "now", time.time()
print "ring", ring
time.sleep(random.choice([0, 2, 4, 6]))
Un to palaižot, mēs varam redzēt:
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)
Kā redzam, šis zvana signalizators nav pārāk stingrs un ļauj mums panākt regulārus miega intervālus pat tad, ja esam pārgulējuši un izkrituši no regulāra grafika.