Пропустить до содержимого

Как использовать ожидание в Python

CodeMDD.io

Python sleep(): Как добавить задержки времени в ваш код

Автор: Mike Driscoll (уровень: промежуточный)


Бывают моменты, когда вам нужно приостановить выполнение вашей программы в Python. Обычно вы хотите, чтобы ваш код выполнялся как можно быстрее. Но есть случаи, когда временное пространство в коде является лучшим решением.

Например, вы можете использовать функцию sleep() в Python, чтобы имитировать задержку в вашей программе. Возможно, вам нужно подождать, пока файл будет загружен или скачан, или пока графика не будет загружена на экран. Вы также можете поставить задержку между вызовами веб-API или между запросами к базе данных. Добавление задержки времени в вашу программу может помочь в каждом из этих случаев, и не только в них!

В этом уроке вы узнаете, как добавить вызовы функции sleep() в Python с помощью:

  • time.sleep()
  • Декораторы
  • Потоки
  • Асинхронное программирование
  • Графический интерфейс пользователя

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

Бесплатный бонус: Получите наш бесплатный руководство “Сила декораторов в Python”, который показывает три расширенных приема использования декораторов для написания более чистого и питонического кода.

Добавление вызова функции sleep() с помощью time.sleep()

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

Вот пример использования time.sleep():

import time
time.sleep(3) # Приостановка на 3 секунды

Если вы запустите этот код в консоли Python, то вы должны будете подождать несколько секунд, прежде чем сможете ввести новую команду.

Примечание: В Python 3.5 разработчики изменили поведение функции time.sleep() немного. Новый вызов системы Python sleep() будет длиться не меньше указанного количества секунд, даже если сон будет прерван сигналом. Однако это не будет работать, если сигнал сам вызывает исключение.

Вы можете проверить, как долго длится вызов функции sleep() с помощью модуля timeit из Python:

Terminal window
$ python3 -m timeit -n 3 "import time; time.sleep(3)"
3 петли, лучшее из 5: 3 секунды на петлю

Здесь вы запускаете модуль timeit с параметром -n, который указывает, сколько раз следует выполнить следующий оператор. Вы можете видеть, что timeit выполнил оператор 3 раза, и что лучшее время выполнения составляет 3 секунды, что соответствует ожиданиям.

По умолчанию timeit выполнит ваш код один миллион раз. Если вы запустите вышеприведенный код со значением -n по умолчанию, то при 3 секундах на итерацию ваш терминал будет занят примерно 34 дня! Модуль timeit имеет несколько других параметров командной строки, с которыми вы можете ознакомиться в его документации.

Давайте создадим что-то более реалистичное. Системному администратору необходимо знать, когда один из его веб-сайтов перестает работать. Вы хотите иметь возможность регулярно проверять статус кода веб-сайта, но вы не хотите делать это слишком часто. Вместо этого вы хотите добавить задержку времени между каждой проверкой. Вот как это можно сделать с помощью функции sleep():

import time
import requests
def check_website(url):
response = requests.get(url)
print(f"Статус код веб-сайта: {response.status_code}")
time.sleep(60) # Пауза на 1 минуту
while True:
check_website("https:https://codemdd.io/example.com")

В этом примере функция check_website() проверяет статус кода веб-сайта, а затем добавляет задержку времени в 1 минуту с помощью функции sleep(). Цикл while True гарантирует, что проверка будет выполняться бесконечно до тех пор, пока вы его не прервёте.


Внимание: Это только начало статьи.