Как сделать задержку, которая не стопит программу?
Вопрос. Как сделать, чтобы функция wait работала как бы в отдельном потоке и не стопила цикл while?
- Вопрос задан более двух лет назад
- 278 просмотров
Комментировать
Решения вопроса 1
Сергей Горностаев @sergey-gornostaev Куратор тега Python
Седой и строгий
Запускать её в отдельном потоке.
Ответ написан более двух лет назад
Нравится 1 3 комментария
daho005 @daho005 Автор вопроса
гениально. Можете скинуть код, как это сделать, если не сложно?

daho005, а че документации по питону удалили из интернета недавно? гугли «многопоточность python» и тд
Сергей Горностаев @sergey-gornostaev Куратор тега Python
import time import threading def wait(): time.sleep(5) print(2) threading.Thread(target=wait).start() while True: print(1)
Метод time.sleep() в Python
Метод python sleep(), используемый для приостановки выполнения для заданного времени (в секундах). Мы можем использовать функцию ожидания python, чтобы остановить выполнение программы за заданное время в секундах. Фактическое время приостановки может быть меньше запрошенного, потому что любой пойманный сигнал прекратит сон() после выполнения ловушки этого сигнала. Кроме того, время приостановки может быть больше, чем запрашивается произвольной суммой из-за планирования другой активности в системе. Вы можете установить задержку в своем скрипте Python, передав количество секунд, которые вы хотите отложить, к функции сна.
import time time.sleep(5) #задержка в течение 5 секунд
Когда вы запустите приведенный выше Пример:, он завершится только через пять секунд.
Метод sleep() поддерживает числа с плавающей запятой, что означает, что вы можете заставить его также ждать доли секунды.
import time time.sleep(1.500)
Когда вы запускаете приведенный выше Пример:, программа ждет завершения 1 секунды и 500 миллисекунд.
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() просто означает подсказку. Это не хороший механизм синхронизации, но достаточно хорош для большинства приложений. Как правило, однако, если вы не хотите спать в течение очень небольшого периода времени, вы можете вообще игнорировать эту информацию.
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
Как сделать задержку в python для tkinter?
Задержка time.sleep() не работает для стороннего интерфейса.
Например, я хочу нарисовать квадрат, а через время еще один, немного в другом месте, но это сделать нельзя, потому что time.sleep() останавливает всю программу.
Есть ли другие способы задержать рисунок в Tkinter?
Лучший ответ
в гугле по запросу tkinter просто уйма ссылок, гугли на английском
https://stackoverflow.com/questions/36011694/how-to-call-a-function-with-delay-in-tkinter
Как я понял, тут есть пример рисования второго круга через 2 сек после щелчка. Может поможет
Остальные ответы
как вариант — по текущему времени
Viktoev nikolerЗнаток (403) 1 год назад
А подробнее можно ?
Άηϑρέΰ ҂ Искусственный Интеллект (179567) никита поранёр, попробуй через self.after(1000, функция) а вообще в асинхронных задачах, это плохой тон, имхо
Может уже поздно, но кому-то пригодится ответ.
Используйте метод update класса Canvas.
canvas.update()
Вот рабочий пример:
import tkinter as tk
import time as tm
window = tk.Tk ()
window.title(«Тест»)
window.geometry(«510×510»)
canvas = tk.Canvas(window, width = 500, height=500, bg=’white’)
canvas.pack()
rect_size = 10
x = 10
y = 10
rectangle = canvas.create_rectangle(x, y, x+rect_size, y+rect_size,fill=’black’ )
canvas.update()
tm.sleep(3)
canvas.delete(rectangle)
canvas.update()
x = 100
y = 300
rectangle = canvas.create_rectangle(x, y, x+rect_size, y+rect_size,fill=’red’ )
canvas.update()
tm.sleep(3)
canvas.delete(rectangle)
Как сделать задержку программы?
Хочу сделать чтобы программа ждала, без time.sleep()
- Вопрос задан более трёх лет назад
- 194 просмотра
Комментировать
Решения вопроса 1
Попробуйте использовать модуль threading и его Timer:
Клик.
from threading import Timer def hello(): print "hello, world" t = Timer(30.0, hello) t.start() # через 30 секунд выведется "hello, world".
Ответ написан более трёх лет назад
Нравится 1 3 комментария

а в чем разница между результатом от вышеприведенного кода и результат time.sleep() ?

Сергей П @trapwalker Куратор тега Python
Hcuy, в том,. что программа продолжает выполняться, но запущен отдельный тред с ожиданием 30сек, после чего выполнится hello
Hcuy, это является таймером. Программа ждёт, когда пройдёт определённое время и выполняет заданные действия. Не думаю, что этот метод останавливает программу.
Ответы на вопрос 1
Сергей Горностаев @sergey-gornostaev Куратор тега Python
Седой и строгий
Модуль, который что-то ждёт.
Ответ написан более трёх лет назад
Нравится 7 1 комментарий

Сергей П @trapwalker Куратор тега Python
NOblo, коллега вам, как бы, намекает, что вы поставили вопрос из рук вон плохо. Это как «хочу сделать трахеотомию, но тыкаю ножиком — кричит. Хочу, чтобы не кричал, какой инструмент использовать?»