Как сделать временной промежуток между командами в Python
Помогите пожалуйста, я — начинающий программист и пытаюсь создать свою простенькую игру и захотелось чтобы персонаж говорил какую-то фразу, а через 2-3 секунды следующую. Подскажите какую библиотеку и в частности команду нужно для этого использовать?
Лучшие ответы ( 1 )
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
Ответы с готовыми решениями:
Временной промежуток между датами
Дана таблица, тематика "Прайс-лист турпутевок" Столбцы таблицы: Номер ПП, Код тура, Дата начала.
Определить временной промежуток между датами
Дана таблица, тематика "Прайс-лист турпутевок" Столбцы таблицы: Номер ПП, Код тура, Дата начала.

Как сделать задержку между командами
У меня есть код в котором три надписи подряд. Но я хочу добавить задержку между ними как это.
Временной промежуток
Пётр Васильевич работает учителем информатики и каждый рабочий день ездит в школу. До школы он.
![]()
691 / 474 / 204
Регистрация: 22.03.2020
Сообщений: 1,052

Сообщение было отмечено Влад_Шоколад как решение
Решение
1 2 3 4
import time # Программа уснёт на 3 секунды time.sleep(3)
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
Помогаю со студенческими работами здесь
Временной промежуток
Всем доброго дня! Каким макаром можно проверить принадлежность к временному промежутку абсолютно.

Временной промежуток
Есть сводная таблица расходов по дням и по времени. Хочу сделать другую таблицу по дням (было бы.

Найти временной промежуток в часах, минутах и секундах
Заданные моменты начала и конца некоторого промежутка времени в часах, минутах и секундах (в.
Вивести числа которые попадают в временной промежуток
Здавствуйте. Есть текстовый файл в котором хранятся значение температуры и дата.Значения в файле.
Нужно сделать промежуток времени между нажатием кнопки на форме
У меня проблема: Я делаю свой собственный симулятор на c# (как проект). В нём есть своеобразная.

Найти в файле временной промежуток указанный пользователем и вставить после найденного текста необходимые данные
Здравствуйте. Я начинающий программист на C#. Делаю проект для себя, для работы с файлами. .
как сделать задержку между командами telebot
Как сделать задержку между выполнениями команд в телеграм боте. Например что бы пользователь написал команду, а потом ещё раз и ему писало «Подождите 5 секунд перед выполнение этой команды» и так в течении 5 секунд. Помогите пожалуйста, буду очень рад вашей помощи.
Отслеживать
задан 3 ноя 2021 в 17:12
5 1 1 серебряный знак 5 5 бронзовых знаков
Хранить время сообщения и chat_id и проверять текущее время от сохраненного времени. Я бы сделал в базе данных, но можно и хранить в памяти, например, в словаре
3 ноя 2021 в 17:19
а можно ответ как это делаеться?
3 ноя 2021 в 17:29
1 ответ 1
Сортировка: Сброс на вариант по умолчанию
Пример ответа сделан в python-telegram-bot (в UPD добавил вариант с pytelegrambotapi), но реализацию можно переписать на другие библиотеки.
- Заводите структуру, например, словарь или базу данных для хранения id чата и времени сообщения
- Получая сообщение проверяйте разницу между текущем временем и тем, что был сохранен
- Можно хранить текущее время в секундах, timestamp
- В примере время храню в объекте datetime , при вычитании одного datetime из другого datetime будет получен объект timedelta , у которого есть метод total_seconds
import datetime as DT . CHAT_BY_DATETIME = dict() def on_request(update: Update, context: CallbackContext): message = update.effective_message text = 'Получено!' need_seconds = 50 current_time = DT.datetime.now() last_datetime = CHAT_BY_DATETIME.get(message.chat_id) # Если первое сообщение (время не задано) if not last_datetime: CHAT_BY_DATETIME[message.chat_id] = current_time else: # Разница в секундах между текущим временем и временем последнего сообщения delta_seconds = (current_time - last_datetime).total_seconds() # Осталось ждать секунд перед отправкой seconds_left = int(need_seconds - delta_seconds) # Если время ожидания не закончилось if seconds_left > 0: text = f'Подождите секунд перед выполнение этой команды' else: CHAT_BY_DATETIME[message.chat_id] = current_time message.reply_text(text, quote=True) .import datetime as DT # SOURCE: pip install pyTelegramBotAPI import telebot from config import TOKEN bot = telebot.TeleBot(TOKEN) CHAT_BY_DATETIME = dict() @bot.message_handler(commands=['help', 'start']) def on_start(message: telebot.types.Message): bot.send_message(message.chat.id, 'Write something') @bot.message_handler(func=lambda message: True) def on_request(message: telebot.types.Message): text = 'Получено!' need_seconds = 50 current_time = DT.datetime.now() last_datetime = CHAT_BY_DATETIME.get(message.chat.id) # Если первое сообщение (время не задано) if not last_datetime: CHAT_BY_DATETIME[message.chat.id] = current_time else: # Разница в секундах между текущим временем и временем последнего сообщения delta_seconds = (current_time - last_datetime).total_seconds() # Осталось ждать секунд перед отправкой seconds_left = int(need_seconds - delta_seconds) # Если время ожидания не закончилось if seconds_left > 0: text = f'Подождите секунд перед выполнение этой команды' else: CHAT_BY_DATETIME[message.chat.id] = current_time bot.reply_to(message, text) bot.infinity_polling()Python sleep(): Как выполнить код с задержкой?

Знакома ли вам ситуация, когда программа Python должна выполняться не сразу? В большинстве случаев требуется, чтобы код запускался как можно скорее. Однако порой перед работой оптимальнее будет дать программе немного поспать.
В Python есть возможность вызвать функцию sleep() для симуляции задержки в выполнении программы. Быть может, вам нужно дождаться загрузки, скачивания или появления графического объекта на экране. Также может потребоваться сделать паузу между вызовами к веб API или запросами к базе данных. В таких случаях поможет добавление вызова функции sleep() в программу.
Главные аспекты данного руководства по вызову sleep() в Python:
- time.sleep() ;
- Декораторы;
- Потоки;
- Async IO;
- Графический пользовательский интерфейс GUI.
Данная статья предназначена для разработчиков Python среднего уровня, что стремятся повысить свою квалификацию. Если это похоже на вас, приступим!
Вызов sleep() через time.sleep()
В Python есть встроенная поддержка для погружения программы в сон. У модуля time есть функция sleep(), что позволяет отсрочить выполнение вызываемого потока на указанное количество секунд.
Есть вопросы по Python?
На нашем форуме вы можете задать любой вопрос и получить ответ от всего нашего сообщества!
Telegram Чат & Канал
Вступите в наш дружный чат по Python и начните общение с единомышленниками! Станьте частью большого сообщества!
Паблик VK
Одно из самых больших сообществ по Python в социальной сети ВК. Видео уроки и книги для вас!
Далее дан пример использования time.sleep() :
import time
time . sleep ( 3 ) # Сон в 3 секундыПри запуске кода из консоли, задержку нужно проводить перед вводом нового оператора в REPL.
На заметку: В Python 3.5 разработчики слегка изменили поведение time.sleep() . Благодаря новой системе вызова sleep() эффект отсрочки будет длиться как минимум на продолжении указанного количества секунд, даже в том случае, если сон прерывается сигналом. Однако, это не касается случаев, если сигнал является признаком вызова исключения.
Вы можете протестировать, как долго продлиться сон с помощью модуля Python timeit:
$ python3 — m timeit — n 3 «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_decoratorsleep() является вашим декоратором. Он принимает значение 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’е сделать задержку программы?
Тут я сделал нечто похожее на игру жизнь. Хочу чтобы программа выполнялась автоматически несколько ходов (кол-во ходов мы забираем из тестового поля). Например, ввели число «5», и программа начала делать 5 шагов, при этом выводя каждый на экран. Всё это обрабатывается в функции
def step_while(): steps = int(ent_steps.get()) for i in range(steps): root.after(700, step) root.update()Хочу задержу программы на определённом моменте, но она почему-то показывает сразу конечный результат(без задержки на каждом шаге). Пробовал также функцию sleep(), но тогда программа просто зависает. Помогите начинающему программисту, если меня можно так назвать. Заранее спасибо
- Вопрос задан более трёх лет назад
- 6508 просмотров
1 комментарий
Простой 1 комментарий

круто, конечно, что Вы привели код, но его читаемость на нуле 🙁
используйте форматирование, пожалуйстаРешения вопроса 0
Ответы на вопрос 1
Недопрограммист
Или как вариант, чтобы не фиксировать время пользователя можно так.import time def step_while(): steps = int(ent_steps.get()) for i in range(steps): root.after(700, step) root.update() #time.sleep(2) пауза 2 сек. input('Для завершения программы нажмите Enter . ')Ответ написан более трёх лет назад
Комментировать
Нравится Комментировать
Ваш ответ на вопросВойдите, чтобы написать ответ

- Python
- +1 ещё
Как сделать форму с добавлением нескольких элементов на django?
- 1 подписчик
- 3 часа назад
- 23 просмотра
