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

Как использовать python wait функцию?

CodeMDD.io

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

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


Иногда вам может потребоваться заставить вашу программу на Python ждать чего-то. Как правило, вы бы хотели, чтобы ваш код выполнялся как можно быстрее. Но есть моменты, когда допустимо задержать выполнение кода на некоторое время.

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

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

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

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


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

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

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

>>> import time
>>> time.sleep(3) # Подождать 3 секунды

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

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

Вы можете проверить, сколько времени длится задержка, используя модуль timeit в Python:

Terminal window
$ python3 -m timeit -n 3 "import time; time.sleep(3)"
3 loops, best of 5: 3 sec per loop

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

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

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

import requests
import time
def check_website(url):
while True:
try:
response = requests.get(url)
response.raise_for_status()
except requests.HTTPError as err:
print(f"Error: {err}")
except requests.ConnectionError:
print("Website is down!")
else:
print("Website is up!")
time.sleep(60) # Пауза в 60 секунд между запросами

Код выше будет выполнять запрос каждые 60 секунд и печатать “Website is up!” или “Website is down!” в зависимости от полученного ответа. Вы можете изменить время задержки, чтобы контролировать частоту запросов.