Як зробити затримку часу в Python?

Я хотів би дізнатися, як поставити часову затримку в скрипті на Python.

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

Ось ще один приклад, коли щось виконується приблизно раз на хвилину:

import time
while True:
    print("This prints once a minute.")
    time.sleep(60) # Delay for 1 minute (60 seconds).
Коментарі (8)

Ви можете використовувати функцію sleep()в модуліtime`. Вона може приймати аргумент з плаваючою комою для субсекундної роздільної здатності.

from time import sleep
sleep(0.1) # Time in seconds
Коментарі (0)

Трохи розваг із сонним генератором.

Мова йде про часову затримку. Це може бути фіксований час, але в деяких випадках нам може знадобитися затримка, виміряна з минулого разу. Ось одне з можливих рішень:

Затримка, виміряна з моменту останнього пробудження (регулярне прокидання)

Ситуація може бути такою, що ми хочемо робити щось настільки регулярно, наскільки це можливо, і ми не хочемо турбуватися з усіма цими останній_час, наступний_час по всьому нашому коду.

Генератор звукового сигналу

Наступний код (sleepy.py) визначає генератор 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

Виклик звичайного buzzergen

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

І запускаємо його, бачимо:

1400102636.46
1400102639.46
1400102642.46
1400102647.47
1400102650.47

Ми також можемо використовувати його безпосередньо в циклі:

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

І запустивши його, ми можемо побачити:

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)

Як бачимо, цей будильник не надто жорсткий і дозволяє нам наздогнати регулярні інтервали сну, навіть якщо ми проспали і вибилися зі звичного графіка.

Коментарі (0)