Python'da nasıl zaman gecikmesi yapabilirim?

Bir Python betiğine nasıl zaman gecikmesi koyacağımı bilmek istiyorum.

import time
time.sleep(5)   # Delays for 5 seconds. You can also use a float value.

İşte bir şeyin yaklaşık olarak dakikada bir çalıştırıldığı başka bir örnek:

import time
while True:
    print("This prints once a minute.")
    time.sleep(60) # Delay for 1 minute (60 seconds).
Yorumlar (8)

timemodülündeki [sleep()` fonksiyonunu kullanabilirsiniz]1. Saniye altı çözünürlük için bir float argüman alabilir.

from time import sleep
sleep(0.1) # Time in seconds
Yorumlar (0)

Uykulu bir jeneratör ile biraz eğlence.

Soru zaman gecikmesi ile ilgili. Sabit bir zaman olabilir, ancak bazı durumlarda son zamandan bu yana ölçülen bir gecikmeye ihtiyacımız olabilir. İşte olası bir çözüm:

Son seferden bu yana ölçülen gecikme (düzenli uyanma)

Durum şu olabilir, bir şeyi olabildiğince düzenli yapmak isteriz ve kodumuzun her yerinde last_time, next_time gibi şeylerle uğraşmak istemeyiz.

Buzzer jeneratörü

Aşağıdaki kod (sleepy.py) bir buzzergen üreteci tanımlar:

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

Normal buzzergen çağrılıyor

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

Ve onu çalıştırdığımızda görüyoruz:

1400102636.46
1400102639.46
1400102642.46
1400102647.47
1400102650.47

Bunu doğrudan bir döngü içinde de kullanabiliriz:

import random
for ring in buzzergen(3):
    print "now", time.time()
    print "ring", ring
    time.sleep(random.choice([0, 2, 4, 6]))

Ve çalıştırırsak görebiliriz:

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)

Gördüğümüz gibi, bu zil çok katı değil ve fazla uyusak ve düzenli programın dışına çıksak bile düzenli uyku aralıklarını yakalamamıza izin veriyor.

Yorumlar (0)