Потоки выполнения и анимация

potoki vypolneniya i animaciya Экскурсия по tkinter, часть 2

Приемы выполнения продолжительных операций в параллельных потоках приобретают особое значение, когда анимация должна оставаться активной, пока приложение выполняет какую-либо работу. Например, представьте себе программу, которая загружает большой объем данных из сети, производит тяжелые математические вычисления или выполняет другие продолжительные операции. Если графический интерфейс такой программы должен воспроизводить анимацию или как- то иначе отображать ход выполнения операции, периодически изменяя внешний вид виджета или перемещая объекты на холсте, — просто используйте метод after, как было показано выше, для периодического вызова обработчика, который будет изменять графический интерфейс. В обработчике, установленном с помощью метода after, можно, к примеру, обновлять индикатор хода выполнения или счетчик.

Кроме того, саму продолжительную операцию, вероятно, лучше выполнять в параллельном потоке, чтобы графический интерфейс оставался активным, и воспроизводить анимацию, ожидая завершения операции. В противном случае графический интерфейс будет оставаться неактивным, пока операция не завершится и не вернет управление. Внутри обработчика, установленного вызовом метода after, главный поток выполнения, управляющий графическим интерфейсом, мог бы проверять переменные или объекты, изменяемые потоком, выполняющим продолжительную операцию, чтобы определить момент ее завершения.

В частности, когда в приложении одновременно выполняется более одной продолжительной операции, порожденные потоки выполнения могут также взаимодействовать с главным потоком графического интерфейса, сохраняя информацию в объекте Python Queue, которая будет обрабатываться реализацией графического интерфейса внутри обработчика, устанавливаемого методом after. В общем случае в очередь Queue допускается помещать даже объекты функций, которые могут вызываться реализацией графического интерфейса для его обновления.

В главе 10 мы еще раз вернемся к обсуждению приемов реализации многопоточных графических интерфейсов и будем использовать их в примере PyMailGUI, далее в этой книге. А пока имейте в виду, что организация вычислений в отдельных потоках выполнения позволяет графическому интерфейсу оставаться активным и воспроизводить анимацию или реагировать на действия пользователя, ожидая окончания вычислений.

Использованная литература:
Марк Лутц — Программирование на Python, 4-е издание, I том, 2011

Оцените статью
Секреты программирования
Добавить комментарий