Функция сна Python: как добавить задержки в код
Опубликовано: 2022-12-01В этом руководстве вы узнаете, как использовать функцию sleep() из встроенного модуля времени Python для добавления временных задержек в код.
Когда вы запускаете простую программу на Python, выполнение кода происходит последовательно — один оператор за другим — без каких-либо задержек по времени. Однако в некоторых случаях вам может потребоваться отложить выполнение кода. В этом вам поможет функция sleep()
из встроенного модуля времени Python.
В этом руководстве вы изучите синтаксис использования функции sleep()
в Python и несколько примеров, чтобы понять, как она работает. Давайте начнем!
Синтаксис Python time.sleep()
Модуль time
, встроенный в стандартную библиотеку Python, предоставляет несколько полезных функций, связанных со временем. В качестве первого шага импортируйте модуль time
в рабочую среду:
import time
Поскольку функция sleep()
является частью модуля time
, теперь вы можете получить к ней доступ и использовать ее со следующим общим синтаксисом:
time.sleep(n)
Здесь n
— количество секунд сна. Это может быть целое число или число с плавающей запятой.
Иногда требуемая задержка может составлять несколько миллисекунд. В этих случаях вы можете преобразовать продолжительность в миллисекундах в секунды и использовать ее в вызове функции сна. Например, если вы хотите ввести задержку в 100 миллисекунд, вы можете указать ее как 0,1 секунды: time.sleep(0.1)
.
Вы также можете импортировать только функцию sleep
из модуля time
:
from time import sleep
Если вы используете описанный выше метод для импорта, вы можете вызвать функцию sleep()
напрямую, без использования time.sleep()
.
Теперь, когда вы изучили синтаксис функции Python sleep()
, давайте рассмотрим примеры кода, чтобы увидеть функцию в действии. Вы можете загрузить сценарии Python, используемые в этом руководстве, из папки python-sleep в этом репозитории GitHub.
Задержка выполнения кода с помощью sleep()
В качестве первого примера воспользуемся функцией сна, чтобы отложить выполнение простой программы на Python.

В следующем фрагменте кода:
- Первый оператор
print()
выполняется без задержки. - Затем мы вводим задержку в 5 секунд, используя функцию
sleep()
. - Второй оператор
print()
будет выполнен только после завершения операции сна.
# /python-sleep/simple_example.py import time print("Print now") time.sleep(5) print("Print after sleeping for 5 seconds")
Теперь запустите файл simple_example.py
и посмотрите на результат:
$ python3 simple_example.py
Добавьте различные задержки в кодовый блок
В предыдущем примере мы ввели фиксированную задержку в 5 секунд между выполнением двух операторов print()
. Далее, давайте закодируем еще один пример, чтобы ввести разные времена задержки при циклическом выполнении итерируемого объекта.
В этом примере мы хотели бы сделать следующее:
- Прокрутите предложение, получите доступ к каждому слову и распечатайте его.
- После печати каждого слова мы хотели бы подождать определенное время, прежде чем распечатать следующее слово в предложении.
Цикл через строку строк
Рассмотрим строку, sentence
. Это строка, где каждое слово является строкой само по себе.
Если мы пройдемся по строке, мы получим каждый символ, как показано ниже:
>>> sentence = "How long will this take?" >>> for char in sentence: ... print(char) # Output (truncated for readability) H o w . . . t a k e ?
Но это не то, чего мы хотим. Мы хотели бы пройтись по предложению и получить доступ к каждому слову. Для этого мы можем вызвать метод split()
для строки sentence
. Это вернет список строк, полученных путем разделения строки sentence
, для всех вхождений пробелов.
>>> sentence.split() ['How', 'long', 'will', 'this', 'take?'] >>> for word in sentence.split(): ... print(word) # Output How long will this take?
Перебор итерируемых объектов с разными задержками
Вернемся к примеру:
-
sentence
— это строка, которую мы хотели бы пройти, чтобы получить доступ к каждому слову. -
delay_times
— это список времени задержки, которое мы будем использовать в качестве аргумента функцииsleep()
во время каждого прохождения цикла.
Здесь мы хотели бы одновременно пройтись по двум спискам: по списку delay_times
и по списку строк, полученных путем разбиения строки sentence
. Вы можете использовать функцию zip()
для выполнения этой параллельной итерации.
Функция Python zip() : zip(list1, list2) возвращает итератор кортежей, где каждый кортеж содержит элемент с индексом i в списках list1 и list2.
# /python-sleep/delay_times.py import time sleep_times = [3,4,1.5,2,0.75] sentence = "How long will this take?" for sleep_time,word in zip(sleep_times,sentence.split()): print(word) time.sleep(sleep_time)
Без функции сна управление немедленно перешло бы к следующей итерации. Поскольку мы ввели задержку, следующий проход по циклу происходит только после завершения операции сна.
Теперь запустите delay_times.py
и посмотрите на вывод:
$ python3 delay_times.py
Последующие слова в строке будут распечатаны с задержкой. Задержка после вывода слова с индексом i
в строке равна числу с индексом i
в списке delay_times
.
Таймер обратного отсчета в Python
В качестве следующего примера давайте закодируем простой таймер обратного отсчета на Python.


Давайте определим функцию countDown()
:
# /python-sleep/countdown.py import time def countDown(n): for i in range(n,-1,-1): if i==0: print("Ready to go!") else: print(i) time.sleep(1)
Далее разберем определение функции countDown()
:
- Функция принимает число
n
в качестве аргумента и считает до нуля, начиная с этого числаn
. - Мы используем time.sleep(1) для достижения задержки в одну секунду между отсчетами.
- Когда счетчик достигает 0, функция выводит «Готово к работе!».
Чтобы выполнить операцию обратного отсчета, мы использовали функцию
range()
с отрицательным значением шага, равным -1.range(n, -1, -1)
поможет нам перебрать диапазон чисел в n, n – 1, n – 2 и так далее до нуля. Напомним, что конечная точка по умолчанию исключается при использовании функцииrange()
.
Далее добавим вызов функции countDown()
с 5 в качестве аргумента.
countDown(5)
Теперь запустите скрипт countdown.py
и посмотрите, как работает функция countDown
!
$ python3 countdown.py
Функция сна в многопоточности
Модуль Python threading предлагает готовые возможности многопоточности. В Python глобальная блокировка интерпретатора или GIL гарантирует, что в любой момент времени работает только один активный поток.

Однако во время операций ввода-вывода и операций ожидания, таких как сон, процессор может приостановить выполнение текущего потока и переключиться на другой ожидающий поток.
Чтобы понять, как это работает, давайте рассмотрим пример.
Создание и запуск потоков в Python
Рассмотрим следующие функции: func1()
, func2()
и func3()
. Они перебирают диапазон чисел и распечатывают их. За этим следует операция сна — на определенное количество секунд — во время каждого прохода через цикл. Мы использовали разное время задержки для каждой из функций, чтобы лучше понять, как выполнение переключается между потоками одновременно.
import time def func1(): for i in range(5): print(f"Running t1, print {i}.") time.sleep(2) def func2(): for i in range(5): print(f"Running t2, print {i}.") time.sleep(1) def func3(): for i in range(4): print(f"Running t3, print {i}.") time.sleep(0.5)
В Python вы можете использовать конструктор Thread()
для создания экземпляра объекта потока. Использование синтаксиса threading.Thread(target = …, args = …)
создает поток, который запускает target
функцию с аргументом, указанным в кортеже args
.
В этом примере функции func1
, func2
и func3
не принимают никаких аргументов. Поэтому достаточно указать только имя функции в качестве цели. Затем мы определяем объекты потоков, t1
, t2
и t3
с func1
, func2
и func3
в качестве целей соответственно.
t1 = threading.Thread(target=func1) t2 = threading.Thread(target=func2) t3 = threading.Thread(target=func3) t1.start() t2.start() t3.start()
Вот полный код для примера потоков:
# /python-sleep/threads.py import time import threading def func1(): for i in range(5): print(f"Running t1, print {i}.") time.sleep(2) def func2(): for i in range(5): print(f"Running t2, print {i}.") time.sleep(1) def func3(): for i in range(4): print(f"Running t3, print {i}.") time.sleep(0.5) t1 = threading.Thread(target=func1) t2 = threading.Thread(target=func2) t3 = threading.Thread(target=func3) t1.start() t2.start() t3.start()
Наблюдайте за выходом. Выполнение изменяется между тремя потоками. Поток t3
имеет наименьшее время ожидания, поэтому он приостанавливается на наименьшее количество времени. Поток t1
имеет наибольшую продолжительность бездействия, составляющую две секунды, поэтому это последний поток, завершивший выполнение.
Чтобы узнать больше, прочитайте учебник по основам многопоточности в Python.
Вывод
В этом руководстве вы узнали, как использовать функцию Python sleep()
для добавления временных задержек в код.
Вы можете получить доступ к функции sleep()
из встроенного модуля time, time.sleep()
. Чтобы отложить выполнение на n секунд, используйте time.sleep(n)
. Кроме того, вы видели примеры задержки последующих итераций в цикле с помощью различных значений, обратного отсчета и многопоточности.
Теперь вы можете изучить более продвинутые возможности модуля времени. Хотите работать с датами и временем в Python? В дополнение к модулю времени вы можете использовать функциональные возможности модулей даты и времени и календаря.
Далее научитесь рассчитывать разницу во времени в Python.