from threading import Timer from datetime import datetime sep = ' : ' quit_sys = 0 hour = datetime.now().hour minute = datetime.now().minute def tick(): global sep global out_clock global quit_sys global minute global hour if quit_sys == 0: if round(datetime.now().second) != 0: if sep == ' : ': out_clock = out_clock.replace(sep, ' ', 1) text_clock.delete(1.0, END) text_clock.insert(1.0, out_clock, 'clock') sep = ' ' else: out_clock = out_clock.replace(sep, ' : ') text_clock.delete(1.0, END) text_clock.insert(1.0, out_clock, 'clock') sep = ' : ' else: minute = datetime.now().minute hour = datetime.now().hour check_zero() if minute == 0 and hour == 0: day = datetime.now().day mounth = mounts_dict[datetime.now().month] year = datetime.now().year day_week = week_dict[datetime.now().weekday()] out_calend = f"{day} {mounth} {year}\n{day_week}" text_calendar.delete(1.0, END) text_calendar.insert(1.0, out_calend, 'clock') out_clock = f"{hour}{sep}{minute}" text_clock.delete(1.0, END) text_clock.insert(1.0, out_clock, 'clock') else: out_clock = f"{hour}{sep}{minute}" text_clock.delete(1.0, END) text_clock.insert(1.0, out_clock, 'clock') Timer(1, tick).start()
Зациклил я ее с помощью метода “Timer” из модуля “threading”. Возможно, я не прав. Возможно, надо было юзать метод “root.after”, а не “Timer”. Но в любом случае я не понимаю, откуда ноги растут? Почему каждую секунду нарастает объем используемой программой ОЗУ? Это ведь так можно нахулиганить и написать вирь, как писали в старину далекую наши деды-программисты, который за 10 секунд сожрет всю ОЗУ компа и вызовет ее переполнение! Но я так хулиганить не собираюсь. Мне просто интересно, шо такое творится в моем коде? Вот почти АСМР видео демонстрация того, как процесс “python.exe” с моими часами, аппетитно почавкивая, кушает ОЗУ:
Youtube
Почти 2Гб ОЗУ он скушал у меня за сутки работы.
Заранее Вам спасибо за помощь!