- Использование функции sleep() в Python
- Синтаксис
- Простой пример функции sleep()
- Функции sleep() и time()
- Цифровые часы с помощью sleep() и timestamp()
- Использование sleep() со строкой
- Заключение
- Python sleep(): Как выполнить код с задержкой?
- Вызов sleep() через time.sleep()
- Вызов sleep() с декораторами
- Вызов sleep() в потоках
- Использование time.sleep() в threading
Использование функции sleep() в Python
Функция sleep() используется для задержки определённых процессов на указанное время (в секундах). В этой статье мы рассмотрим несколько примеров, которые позволят вам получше познакомиться с методом sleep() в Python.
Синтаксис
Во-первых, чтобы запустить код, нам нужно добавить модуль time . Функция sleep() входит в этот модуль и принимает только один параметр – время в секундах, на которое остановится наша программа.
Простой пример функции sleep()
Чтобы понять смысл функции sleep() , разберём простой пример. Три строки выводятся в определённый промежуток времени – задержку обеспечивает sleep . Сперва выводится первая строка, затем идёт функция sleep() , которая задерживает вывод на 2 секунды. Точно так же для следующего print мы используем sleep на 5 секунд. Код выглядит следующим образом:
import time print('Hello world') time.sleep(2) print('sleep python function') time.sleep(5) print('sleep function is working') # Вывод Hello world sleep python function sleep function is working Process finished with exit code 0
В тексте этого не видно, но после запуска кода строки выводятся через указанные интервалы времени.
Функции sleep() и time()
Рассмотрим пример использования sleep() для создания промежутка времени. Мы используем функцию time() , чтобы узнать текущее время, и localtime() , чтобы получить текущие дату и время в конкретной местности. Кроме того, есть функция strftime() («string from time»), которая возвращает время в виде строки в указанном формате.
import time current = time.localtime(time.time()) print(time.strftime('Start time is: %H:%M:%S', current)) print('2 seconds wait') time.sleep(2) current = time.localtime(time.time()) print(time.strftime('Ending time is: %H:%M:%S', current)) # Вывод Start time is: 14:54:35 2 seconds wait Ending time is: 14:54:37 Process finished with exit code 0
В результате интервал между двумя моментами времени составил две секунды.
Цифровые часы с помощью sleep() и timestamp()
В этом скрипте мы создадим 7 временных отметок и добавим задержку на 2 секунды между каждыми двумя отметками. Первый шаг такой же, как прежде.
От предыдущего этот пример отличается тем, что мы создали временные отметки несколько раз с помощью цикла for . Цикл отработает 7 итераций. Опять же, мы использовали strftime() , чтобы получить время в виде строки, а sleep() — чтобы обеспечить задержку в 2 секунды между каждыми двумя отметками.
import time for i in range(7): currenttime = time.localtime() timestamp = time.strftime('%H:%M:%S', currenttime) time.sleep(2) print(timestamp) # Вывод 15:00:32 15:00:34 15:00:36 15:00:38 15:00:40 15:00:42 15:00:44 Process finished with exit code 0
Мы получили 7 временных отметок через каждые 2 секунды.
Использование sleep() со строкой
Применить функцию sleep() со строкой вам может понадобиться, если захотите вывести каждый символ строки с определённой задержкой. Реализовать это очень просто. Рассмотрим эту задачу в коде ниже.
В качестве строки возьмём слово. Переберем это слово в цикле for , а на каждой итерации поставим задержку в 4 секунды.
import time string = 'Pythonist' for i in string: print(i) time.sleep(2) # Вывод P y t h o n i s t Process finished with exit code 0
Заключение
В этой статье мы рассмотрели применение функции sleep() в различных ситуациях. Она помогает при решении различных задач, связанных со временем. Теперь вы можете добавлять задержки в свою программу, например, чтобы предотвратить неправильное использование системных ресурсов.
Python sleep(): Как выполнить код с задержкой?
Знакома ли вам ситуация, когда программа Python должна выполняться не сразу? В большинстве случаев требуется, чтобы код запускался как можно скорее. Однако порой перед работой оптимальнее будет дать программе немного поспать.
В Python есть возможность вызвать функцию sleep() для симуляции задержки в выполнении программы. Быть может, вам нужно дождаться загрузки, скачивания или появления графического объекта на экране. Также может потребоваться сделать паузу между вызовами к веб API или запросами к базе данных. В таких случаях поможет добавление вызова функции sleep() в программу.
Главные аспекты данного руководства по вызову sleep() в Python:
Данная статья предназначена для разработчиков Python среднего уровня, что стремятся повысить свою квалификацию. Если это похоже на вас, приступим!
Вызов sleep() через time.sleep()
В Python есть встроенная поддержка для погружения программы в сон. У модуля time есть функция sleep(), что позволяет отсрочить выполнение вызываемого потока на указанное количество секунд.
Есть вопросы по Python?
На нашем форуме вы можете задать любой вопрос и получить ответ от всего нашего сообщества!
Telegram Чат & Канал
Вступите в наш дружный чат по Python и начните общение с единомышленниками! Станьте частью большого сообщества!
Одно из самых больших сообществ по Python в социальной сети ВК. Видео уроки и книги для вас!
Далее дан пример использования time.sleep() :
При запуске кода из консоли, задержку нужно проводить перед вводом нового оператора в REPL.
На заметку: В Python 3.5 разработчики слегка изменили поведение time.sleep() . Благодаря новой системе вызова sleep() эффект отсрочки будет длиться как минимум на продолжении указанного количества секунд, даже в том случае, если сон прерывается сигналом. Однако, это не касается случаев, если сигнал является признаком вызова исключения.
Вы можете протестировать, как долго продлиться сон с помощью модуля Python timeit:
Здесь модуль timeit запускается с параметром -n , что указывает timeit , сколько раз выполнять последующий оператор. Можно заметить, что timeit выполнил оператор 3 раза, а лучшее время длилось 3 секунды, чего и следовало ожидать.
По умолчанию timeit будет запускать код миллион раз. Если бы вы запустили вышеуказанный код, оставив значение -n по умолчанию, тогда при 3 секундах на итерацию код завис бы примерно на 34 дня! У модуля timeit есть несколько других настроек для командной строки, с которыми можно ознакомиться в документации.
Создадим что-то более практичное. Системному администратору всегда нужно быть в курсе, если какой-то из сайтов упал. Вы бы хотели иметь возможность проверить код состояния сайта регулярно, но запрашивать веб сервер постоянно нельзя, ведь это сильно повлияет на производительность. В Python одним из простых способов совершить такую проверку является использование системного вызова sleep() :
Здесь создается uptime_bot() , что принимает URL в качестве аргумента. Затем функция пытается открыть данный URL c urllib . При возникновении HTTPError или URLError программа перехватывает ошибку и выводит на экран. На практике вам, скорее всего, придется зафиксировать ошибку и отправить письмо веб-мастеру или системному администратору.
Если ошибок нет, код спокойно выполняется. Вне зависимости от того, что произойдет, программа уходит в сон на 60 секунд. Это значит, что доступ к сайту будет раз за минуту. URL, используемый в примере, содержит ошибки. Ежеминутный вывод на консоли выглядит следующим образом:
Попробуйте обновить код, используя проверенный хороший URL, к примеру https://www.google.com/. После этого вы можете перезапустить программу и проверить, что изменилось. Также можно попробовать обновить код для отправки сообщения или записи об ошибке. Для получения более подробной информации можете ознакомиться со статьями отправка писем smtp и логирование.
Вызов sleep() с декораторами
В некоторых случаях нужно повторно запустить неудачно выполненную в первый раз функцию. Зачастую это происходит, когда требуется повторить загрузку файла ввиду ранней перегрузки сервера. Как правило, никто не хочет делать частые запросы на серверы, поэтому добавление в Python вызова sleep() между каждым запросом предпочтительно.
Другим возможным случаем использования sleep() является необходимость проверки состояния пользовательского интерфейса во время автоматического теста. В зависимости от компьютера, на котором запускается тест, пользовательский интерфейс может грузиться быстрее или медленнее обычного. Это может изменить отображаемое на экране во время проверки программой чего-то.
В данном случае можно указать программе, чтобы та погрузилась в сон на мгновенье и затем проверить все опять через несколько секунд. Это может означать разницу между прохождением или провалом теста.
Для добавления системного вызова sleep() в Python можно использовать декоратор в каждом из данных случаев. Разберем следующий пример:
sleep() является вашим декоратором. Он принимает значение timeout и количество раз для повтора retry , что по умолчанию равняется 3. Внутри sleep() есть другая функция, the_real_decorator() , которая принимает декорируемую функцию.
В конечном итоге самая внутренняя функция wrapper() принимает аргументы и ключевые слова, которые вы передаете декорируемой функции. Здесь все и происходит! Используется цикл while, чтобы повторить вызов функции. Если возникла ошибка, вызывается time.sleep() , увеличивается счетчик попыток retries и повторяется попытка запуска функции.
Теперь переписывается uptime_bot() для использования нового декоратора:
Здесь вы декорируете uptime_bot() с помощью sleep() в 3 секунды. Вы также удалили оригинальный цикл while и старый вызов sleep(60) . Декоратор теперь позаботится об этом.
Другое изменение состоит в добавлении raise внутри блоков, отвечающих за обработку исключений. Это нужно для правильной работы декоратора. Можно также написать декоратор, чтобы он отвечал за ошибки, однако ввиду того, что исключения касаются только urllib , может быть лучше сохранить декоратор в текущем состоянии. В таком случае он будет работать c более широким ассортиментом функций.
На заметку: При желании более подробно узнать о том, как справляться с исключениями в Python, можете ознакомиться со статьей: Обработка исключений в Python
Декоратору можно добавить несколько улучшений. Если число попыток заканчивается, и он по-прежнему проваливается, тогда можно сделать так, чтобы он повторно вызвал последнюю ошибку. Декоратор подождет 3 секунды после последней неудачи, что не всегда нужно. Можете попробовать поэкспериментировать самостоятельно.
Вызов sleep() в потоках
Могут возникнуть ситуации, когда в Python требуется добавить вызов sleep() для потока. К примеру, запуск скрипта миграции для базы данных с миллионами записей. Здесь важно избежать простоя, а также не ждать дольше необходимого для завершения миграции, поэтому можно использовать потоки.
На заметку: Потоки являются одним из методов использования конкурентности в Python. Можно запустить несколько потоков одновременно, чтобы увеличить производительность приложения. Если потоки в Python являются для вас новой темой, ознакомьтесь со статьей модуль threading.
Чтобы клиенты не замечали какого-либо замедления, каждый поток должен работать в течение короткого периода времени, а затем уходить в сон. Есть два способа сделать это:
Начнем с разбора time.sleep() .
Использование time.sleep() в threading
Python Logging Cookbook является хорошим примером использования time.sleep() . Модуль логирования logging является потоко-безопасным, поэтому в данном примере он будет полезнее, чем операторы print() . В основе следующего кода лежит данный пример: