Рубрики
Без рубрики

Использование метода Python time.sleep()

В этом уроке мы рассмотрим метод Python time.sleep (). В нашем предыдущем уроке мы рассмотрели модуль времени, который является утилитой по умолчанию

Автор оригинала: Pankaj Kumar.

В этом уроке мы рассмотрим метод Python time.sleep (). В нашем предыдущем уроке мы рассмотрели модуль времени, который является библиотекой утилит по умолчанию для выполнения различных задач синхронизации.

Метод Python time.sleep() используется для остановки выполнения текущей программы/потока на заданное время.

Текущая программа/поток по существу ничего не делает в этот период времени, поэтому он “спит” в течение этого периода времени, прежде чем вернуться из своего текущего состояния.

Давайте посмотрим, как мы можем использовать эту функцию.

Использование Python time.sleep()

Эта функция является частью модуля time , поэтому мы называем ее с помощью точечной нотации, такой как time.sleep(). Сначала мы должны импортировать модуль времени.

import time

Теперь, чтобы остановить выполнение программы, нам нужно указать количество секунд в качестве аргумента.

import time

num_seconds = 5

print('Going to sleep for', str(num_seconds), 'seconds') 
time.sleep(num_seconds)
print('Woke up after', str(num_seconds), 'seconds')

Выход

Going to sleep for 5 seconds
Woke up after 5 seconds

Если вы попробуете это на своем компьютере, ваша программа остановится на 5 секунд между двумя выходами, так как она спит в течение этого времени.

Мы также можем указать количество секунд в качестве числа с плавающей запятой, чтобы мы могли спать в течение 0.001 секунды (1 миллисекунда) или даже 0.0000001 секунды (1 микросекунда).

Это позволит сделать задержку максимально точной в пределах точности с плавающей запятой и часов.

import time

num_millis = 2

print('Going to sleep for', str(num_millis), 'milliseconds') 
time.sleep(num_millis / 1000)
print('Woke up after', str(num_millis), 'milliseconds')

Выход

Going to sleep for 2 milliseconds
Woke up after 2 milliseconds

Чтобы измерить точное время сна, мы можем использовать метод time.time() для запуска таймера. Разница между начальным значением и конечным значением таймера будет нашим временем выполнения.

Давайте проверим ваше фактическое время сна в приведенной выше программе.

import time

num_millis = 2

print('Going to sleep for', str(num_millis), 'milliseconds')
# Start timer

start_time = time.time() 
time.sleep(num_millis / 1000)
# End timer
end_time = time.time()

print('Woke up after', str(end_time - start_time), 'seconds')

Выход

Going to sleep for 2 milliseconds
Woke up after 0.0020711421966552734 seconds

Здесь время не составляет ровно 2 миллисекунды, как вы можете видеть. Речь идет о 2.071 миллисекунды, что немного больше, чем это.

Это связано с некоторыми задержками в выделении ресурсов, планировании процессов и т. Д. Из операционной системы, Что может вызвать небольшую задержку.

Степень этой задержки будет отличаться, поскольку вы не знаете точного состояния операционной системы в конкретный момент времени.

Переменная временная задержка для time.sleep()

Мы можем передать переменную в time.sleep() , если по какой-то причине вам нужна другая задержка.

import time

delays = [1, 1.5, 2]

for delay in delays:
    print('Sleeping for', delay, 'seconds')
    time.sleep(delay)

Выход

Sleeping for 1 seconds
Sleeping for 1.5 seconds
Sleeping for 2 seconds

Теперь, когда мы рассмотрели использование time.sleep() для нашей программы, мы можем сделать то же самое и для потоков.

Использование Python time.sleep() в потоке

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

Приведенный ниже фрагмент показывает, как мы можем заставить несколько потоков ждать и печатать выходные данные, используя Python time.sleep() .

import time
from threading import Thread

class Worker(Thread):
    # Entry point after thread.start() is invoked
    def run(self):
        for i in range(4):
            print('Worker Thread', i)
            time.sleep(i + 1)

class Waiter(Thread):
    def run(self):
        for i in range(10, 15):
            print('Waiter thread', i)
            time.sleep(i - 9)

print('Starting Worker Thread....')
Worker().start()
print('Starting Waiter Thread....')
Waiter().start()
print('Main thread finished!')

Выход

Starting Worker Thread....
Worker Thread 0
Starting Waiter Thread....
Waiter thread 10
Main thread finished!
Worker Thread 1
Waiter thread 11
Worker Thread 2
Waiter thread 12
Worker Thread 3
Waiter thread 13
Waiter thread 14

Здесь выполнение основного потока (программы) не зависит от выполнения двух потоков. Итак, наша основная программа закончилась первой, прежде чем за ней последовали потоки Рабочий и Официант .

Вывод

В этой статье мы узнали об использовании функции Python time.sleep() различными способами.

Рекомендации