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

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

[

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

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

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

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

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

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

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

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

$ 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
while True:
response = requests.get("https://www.example.com")
if response.status_code != 200:
print("Website is down!")
time.sleep(60) # Пауза на 1 минуту

В этом примере ваш код будет проверять статус код сайта и выводить сообщение, если код не равен 200 (что означает, что сайт недоступен). Затем вы добавляете паузу на 60 секунд, чтобы ваш код не перегружал сервер бесконечными запросами.

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

Добавление вызова функции sleep() с использованием декораторов

Еще одним способом добавления задержки в ваш код является использование декораторов. Декораторы - это функции, которые принимают функцию в качестве аргумента и возвращают новую функцию. Это позволяет вам модифицировать поведение вызываемой функции, не изменяя ее саму.

Чтобы использовать декораторы для добавления задержки времени в ваш код, вам понадобится функция-декоратор, которая будет выполняться перед вызовом целевой функции и добавлять задержку. Вот пример такой функции-декоратора:

import time
def sleep_decorator(function):
def wrapper(*args, **kwargs):
time.sleep(3)
result = function(*args, **kwargs)
return result
return wrapper
@sleep_decorator
def greet(name):
print(f"Hello, {name}!")
greet("Alice")

В этом примере sleep_decorator - это функция-декоратор, которая добавляет паузу на 3 секунды перед вызовом целевой функции greet. Декоратор принимает на вход функцию function, добавляет паузу с помощью time.sleep() и затем вызывает целевую функцию с переданными аргументами. Результат выполнения функции возвращается обратно.

Для использования декоратора вы можете просто пометить вашу функцию декоратором с помощью символа @, после чего декоратор автоматически применится к вызовам этой функции. В примере мы применили декоратор @sleep_decorator к функции greet, и теперь при вызове greet будет выполняться пауза перед приветствием.

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

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

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

Для добавления задержки с использованием потоков вам понадобится модуль threading. Вот пример использования потоков и функции time.sleep() для добавления задержки времени:

import threading
import time
def delayed_function():
time.sleep(3)
print("Delayed function executed.")
thread = threading.Thread(target=delayed_function)
thread.start()
print("Main thread continues execution.")

В этом примере мы создаем отдельный поток thread, в котором выполняется функция delayed_function. В функции мы добавляем паузу на 3 секунды с помощью time.sleep(), а затем выводим сообщение в консоль. Основной поток также продолжает выполнение и выводит свое сообщение.

Использование потоков для добавления задержки - это еще один способ сделать ваш код более гибким и асинхронным. Потоки позволяют выполнять параллельно несколько задач, что полезно, когда вы хотите, чтобы ваша программа продолжала работать, не приостанавливаясь из-за задержки.

Заключение

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

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