Метод python sleep(), используемый для приостановки выполнения для заданного времени (в секундах). Мы можем использовать функцию ожидания python, чтобы остановить выполнение программы за заданное время в секундах. Фактическое время приостановки может быть меньше запрошенного, потому что любой пойманный сигнал прекратит сон() после выполнения ловушки этого сигнала. Кроме того, время приостановки может быть больше, чем запрашивается произвольной суммой из-за планирования другой активности в системе. Вы можете установить задержку в своем скрипте Python, передав количество секунд, которые вы хотите отложить, к функции сна.
import time time.sleep(5) #задержка в течение 5 секунд
Когда вы запустите приведенный выше Пример:, он завершится только через пять секунд.
Метод sleep() поддерживает числа с плавающей запятой, что означает, что вы можете заставить его также ждать доли секунды.
import time time.sleep(1.500)
Когда вы запускаете приведенный выше Пример:, программа ждет завершения 1 секунды и 500 миллисекунд.
Уроки Python Как сделать задержку времени
time.sleep (1) # sleep в течение 1 секунды time.sleep (60) # сон в течение 1 минуты time.sleep (3600) # сон в течение 1 часа
Задержка времени для бесконечного цикла
Вот еще один пример когда что-то выполняется примерно каждые 5 секунд.
import time while True: print(«Thi smessage prints each 5 seconds») time.sleep(5) # Задержка в течение 5 секунд
Вышеупомянутая программа запускает бесконечный цикл, поэтому вы должны принудительно остановить программу, когда захотите.
Сон программы
Следующая программа представляет собой пример обратного отсчета, используя метод ожидания, чтобы подождать 1 секунду каждого номера.
import time wait = 10 while wait > 0: print(wait) time.sleep(1) wait = wait — 1
Thread и Sleep
Темы, как правило, содержатся в процессах. В рамках одного процесса может существовать более одного потока. Эти потоки разделяют память и состояние процесса.
В следующем примере вы можете увидеть, как метод sleep() работает в многопроцессорной программе.
import time from threading import Thread class Main_Thread(Thread): def run(self): for x in range(100, 104): print(x, » — Main Thread») time.sleep(5) class Service_Thread(Thread): def run(self): for x in range(1, 16): print(x) time.sleep(1) Main_Thread().start() Service_Thread().start()
100 — Main Thread 1 2 3 4 5 101 — Main Thread 6 7 8 9 10 102 — Main Thread 11 12 13 14 15 103 — Main Thread
Точность time.sleep()
Time.sleep (секунды) не в реальном времени.
Функция time.sleep() использует функцию sleep() базовой операционной системы, иногда она может быть отключена с точки зрения миллисекунд. Большинство ПК-машин имеют аппаратные ограничения в диапазоне 1-10 мс, независимо от операционной системы. В операционной системе time.sleep() просто означает подсказку. Это не хороший механизм синхронизации, но достаточно хорош для большинства приложений. Как правило, однако, если вы не хотите спать в течение очень небольшого периода времени, вы можете вообще игнорировать эту информацию.
Управление временем на python | Модуль time python (питон)
import time sleep_start = time.time() for cnt in range(0,10): print(cnt) time.sleep(1) # 1 sec delay sleep_end = time.time() diff = sleep_end — sleep_start print(«Looping time :»,diff)
Looping time : 10.040287017822266
Источник: programmera.ru
Python sleep(): Как выполнить код с задержкой?
Знакома ли вам ситуация, когда программа Python должна выполняться не сразу? В большинстве случаев требуется, чтобы код запускался как можно скорее. Однако порой перед работой оптимальнее будет дать программе немного поспать.
В Python есть возможность вызвать функцию sleep() для симуляции задержки в выполнении программы. Быть может, вам нужно дождаться загрузки, скачивания или появления графического объекта на экране. Также может потребоваться сделать паузу между вызовами к веб API или запросами к базе данных. В таких случаях поможет добавление вызова функции sleep() в программу.
Главные аспекты данного руководства по вызову sleep() в Python:
- time.sleep() ;
- Декораторы;
- Потоки;
- Async IO;
- Графический пользовательский интерфейс GUI.
Данная статья предназначена для разработчиков Python среднего уровня, что стремятся повысить свою квалификацию. Если это похоже на вас, приступим!
Вызов sleep() через time.sleep()
В Python есть встроенная поддержка для погружения программы в сон. У модуля time есть функция sleep(), что позволяет отсрочить выполнение вызываемого потока на указанное количество секунд.
Есть вопросы по Python?
На нашем форуме вы можете задать любой вопрос и получить ответ от всего нашего сообщества!
Telegram Чат import time; time.sleep(3)»
3 loops , best of 3 : 3 sec per loop
Здесь модуль timeit запускается с параметром -n , что указывает timeit , сколько раз выполнять последующий оператор. Можно заметить, что timeit выполнил оператор 3 раза, а лучшее время длилось 3 секунды, чего и следовало ожидать.
По умолчанию timeit будет запускать код миллион раз. Если бы вы запустили вышеуказанный код, оставив значение -n по умолчанию, тогда при 3 секундах на итерацию код завис бы примерно на 34 дня! У модуля timeit есть несколько других настроек для командной строки, с которыми можно ознакомиться в документации.
Создадим что-то более практичное. Системному администратору всегда нужно быть в курсе, если какой-то из сайтов упал. Вы бы хотели иметь возможность проверить код состояния сайта регулярно, но запрашивать веб сервер постоянно нельзя, ведь это сильно повлияет на производительность. В Python одним из простых способов совершить такую проверку является использование системного вызова sleep() :
import time
import urllib . request
import urllib . error
def uptime_bot ( url ) :
while True :
conn = urllib . request . urlopen ( url )
except urllib . error . HTTPError as e :
# Отправка admin / log
print ( f ‘HTTPError: для ‘ )
except urllib . error . URLError as e :
# Отправка admin / log
print ( f ‘URLError: для ‘ )
# Сайт поднят
print ( f ‘ поднят’ )
time . sleep ( 60 )
if __name__ == ‘__main__’ :
url = ‘http://www.google.com/py’
uptime_bot ( url )
Здесь создается uptime_bot() , что принимает URL в качестве аргумента. Затем функция пытается открыть данный URL c urllib . При возникновении HTTPError или URLError программа перехватывает ошибку и выводит на экран. На практике вам, скорее всего, придется зафиксировать ошибку и отправить письмо веб-мастеру или системному администратору.
Если ошибок нет, код спокойно выполняется. Вне зависимости от того, что произойдет, программа уходит в сон на 60 секунд. Это значит, что доступ к сайту будет раз за минуту. URL, используемый в примере, содержит ошибки. Ежеминутный вывод на консоли выглядит следующим образом:
HTTPError : 404 для http : / / www .google .com / py
Попробуйте обновить код, используя проверенный хороший URL, к примеру https://www.google.com/. После этого вы можете перезапустить программу и проверить, что изменилось. Также можно попробовать обновить код для отправки сообщения или записи об ошибке. Для получения более подробной информации можете ознакомиться со статьями отправка писем smtp и логирование.
Вызов sleep() с декораторами
В некоторых случаях нужно повторно запустить неудачно выполненную в первый раз функцию. Зачастую это происходит, когда требуется повторить загрузку файла ввиду ранней перегрузки сервера. Как правило, никто не хочет делать частые запросы на серверы, поэтому добавление в Python вызова sleep() между каждым запросом предпочтительно.
Другим возможным случаем использования sleep() является необходимость проверки состояния пользовательского интерфейса во время автоматического теста. В зависимости от компьютера, на котором запускается тест, пользовательский интерфейс может грузиться быстрее или медленнее обычного. Это может изменить отображаемое на экране во время проверки программой чего-то.
В данном случае можно указать программе, чтобы та погрузилась в сон на мгновенье и затем проверить все опять через несколько секунд. Это может означать разницу между прохождением или провалом теста.
Для добавления системного вызова sleep() в Python можно использовать декоратор в каждом из данных случаев. Разберем следующий пример:
import time
import urllib . request
import urllib . error
def sleep ( timeout , retry = 3 ) :
def the_real_decorator ( function ) :
def wrapper ( * args , * * kwargs ) :
retries = 0
while retries < retry :
value = function ( * args , * * kwargs )
if value is None :
print ( f ‘Сон на секунд’ )
time . sleep ( timeout )
retries += 1
return wrapper
return the_real_decorator
sleep() является вашим декоратором. Он принимает значение timeout и количество раз для повтора retry , что по умолчанию равняется 3. Внутри sleep() есть другая функция, the_real_decorator() , которая принимает декорируемую функцию.
В конечном итоге самая внутренняя функция wrapper() принимает аргументы и ключевые слова, которые вы передаете декорируемой функции. Здесь все и происходит! Используется цикл while, чтобы повторить вызов функции. Если возникла ошибка, вызывается time.sleep() , увеличивается счетчик попыток retries и повторяется попытка запуска функции.
Теперь переписывается uptime_bot() для использования нового декоратора:
def uptime_bot ( url ) :
conn = urllib . request . urlopen ( url )
except urllib . error . HTTPError as e :
# Отправка admin / log
print ( f ‘HTTPError: для ‘ )
# Повторное поднятие ошибки исключения для декоратора
raise urllib . error . HTTPError
except urllib . error . URLError as e :
# Отправка admin / log
print ( f ‘URLError: для ‘ )
# Повторное поднятие ошибки исключения для декоратора
raise urllib . error . URLError
# Сайт поднят
print ( f ‘ поднят’ )
if __name__ == ‘__main__’ :
url = ‘http://www.google.com/py’
uptime_bot ( url )
Здесь вы декорируете uptime_bot() с помощью sleep() в 3 секунды. Вы также удалили оригинальный цикл while и старый вызов sleep(60) . Декоратор теперь позаботится об этом.
Другое изменение состоит в добавлении raise внутри блоков, отвечающих за обработку исключений. Это нужно для правильной работы декоратора. Можно также написать декоратор, чтобы он отвечал за ошибки, однако ввиду того, что исключения касаются только urllib , может быть лучше сохранить декоратор в текущем состоянии. В таком случае он будет работать c более широким ассортиментом функций.
На заметку: При желании более подробно узнать о том, как справляться с исключениями в Python, можете ознакомиться со статьей: Обработка исключений в Python
Декоратору можно добавить несколько улучшений. Если число попыток заканчивается, и он по-прежнему проваливается, тогда можно сделать так, чтобы он повторно вызвал последнюю ошибку. Декоратор подождет 3 секунды после последней неудачи, что не всегда нужно. Можете попробовать поэкспериментировать самостоятельно.
Вызов sleep() в потоках
Могут возникнуть ситуации, когда в Python требуется добавить вызов sleep() для потока. К примеру, запуск скрипта миграции для базы данных с миллионами записей. Здесь важно избежать простоя, а также не ждать дольше необходимого для завершения миграции, поэтому можно использовать потоки.
На заметку: Потоки являются одним из методов использования конкурентности в Python. Можно запустить несколько потоков одновременно, чтобы увеличить производительность приложения. Если потоки в Python являются для вас новой темой, ознакомьтесь со статьей модуль threading.
Чтобы клиенты не замечали какого-либо замедления, каждый поток должен работать в течение короткого периода времени, а затем уходить в сон. Есть два способа сделать это:
- Использовать time.sleep() как ранее;
- Использовать Event.wait() из модуля threading ;
Начнем с разбора time.sleep() .
Использование time.sleep() в threading
Python Logging Cookbook является хорошим примером использования time.sleep() . Модуль логирования logging является потоко-безопасным, поэтому в данном примере он будет полезнее, чем операторы print() . В основе следующего кода лежит данный пример:
Источник: python-scripts.com
Функция time sleep() в Python
В этом уроке мы узнаем о методе time sleep() в python. Функция используется для добавления задержки в выполнении программы. Мы можем использовать функцию sleep(), чтобы остановить выполнение программы на заданное время в секундах. Обратите внимание, что функция ожидания времени фактически останавливает выполнение только текущего потока, а не всей программы.
Синтаксис
sleep() – это метод модуля времени в Python. Итак, сначала мы должны импортировать модуль времени, затем мы можем использовать этот метод. Способ использования функции sleep():
Здесь аргумент метода sleep() t находится в секундах. Это означает, что когда выполняется инструкция time.sleep(t), следующая строка кода будет выполнена через t секунд. Смотрите следующий пример:
# importing time module import time print(«Before the sleep statement») time.sleep(5) print(«After the sleep statement»)
Если вы запустите приведенный выше код, вы увидите, что вторая печать выполняется через 5 секунд. Таким образом, вы можете отложить свой код по мере необходимости.
Аргумент может иметь плавающее значение для более точной задержки. Например, вы хотите сделать задержку на 100 миллисекунд, что составляет 0,1 секунды, как показано ниже:
import time time.sleep(0.100)
Пример
Давайте посмотрим на следующий пример функции sleep в Python.
import time startTime = time.time() for i in range(0,5): print(i) # making delay for 1 second time.sleep(1) endTime = time.time() elapsedTime = endTime — startTime print(«Elapsed Time = %s» % elapsedTime)
0 1 2 3 4 Elapsed Time = 5.059988975524902
Прошедшее время больше 5, потому что каждый раз в цикле for выполнение останавливается на 1 секунду. Дополнительное время связано со временем выполнения программы, планированием потоков операционной системы и т.д.
Различное время задержки сна
Иногда может потребоваться задержка на разные секунды. Сделать это можно следующим образом:
import time for i in [ .5, .1, 1, 2]: print(«Waiting for %s» % i , end=») print(» seconds») time.sleep(i)
Waiting for 0.5 seconds Waiting for 0.1 seconds Waiting for 1 seconds Waiting for 2 seconds
Эффектная печать с использованием sleep()
Возможно, вам придется напечатать какое-нибудь сообщение необычным образом, вы можете сделать это так:
# importing time module import time message = «Hi. I am trying to create suspense» for i in message: # printing each character of the message print(i) time.sleep(0.3)
Если вы запустите приведенный выше код, вы увидите, что после печати каждого символа сообщения требуется некоторое время, что кажется эффектным.
Метод при многопоточности
Функция time sleep() – очень важный метод для многопоточности. Ниже приведен простой пример, показывающий, что функция ожидания времени останавливает выполнение текущего потока только при многопоточном программировании.
import time from threading import Thread class Worker(Thread): def run(self): for x in range(0, 11): print(x) time.sleep(1) class Waiter(Thread): def run(self): for x in range(100, 103): print(x) time.sleep(5) print(«Staring Worker Thread») Worker().start() print(«Starting Waiter Thread») Waiter().start() print(«Done»)
На изображении ниже показан результат, полученный в приведенном выше примере.
Источник: pythonim.ru