Я пишу короткое приложение в python, используя tkinter. Все работает, за исключением неожиданной паузы - это должно генерировать событие два раза в секунду, но часто это делает паузу на 5 или 6 секунд между сигналами. Я поместил операторы print, чтобы найти задержку, и обнаружил, что это следующее утверждение:
self.frame.after (ms, self.tick_handler)
мс равен 500, поэтому это должно послать событие примерно за 0,5 секунды. Обычно это происходит, но часто он висит на 5 или 6 секунд, прежде чем tick_handler () получает сигнал. Программа довольно проста: один рабочий поток получает все входные данные из одной очереди, а события поступают из одного кадра tkinter. Оператор after()
находится в рабочем потоке. Я пытался отключить g c (gc.disable()
), но это не имеет значения. На моем компьютере эта активность минимальна.
Если я посылаю другой ввод во время паузы с помощью мыши или клавиш, он обрабатывается немедленно, поэтому рабочий поток не блокируется. Похоже, что сигнал запроса получен, но не запущен в течение некоторого времени. Я знаю, что не могу ожидать производительности в реальном времени, поэтому 0,6 секунды не заслуживают внимания, но 6,0 секунды?
Впервые я работал с tkinter. Что-то мне не хватает в обработке событий?