Автор оригинала: 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()
различными способами.
Рекомендации
- Статья JournalDev вовремя.сон()
- Документация по Python