Многопоточная модель выполнения

mnogopotochnaya model vypolneniya Почтовый клиент PyMailGUI Python

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

Рис. 14.8. Неблокирующий диалог с информацией о ходе выполнения операции: загрузка

Вообще, все операции обмена с сервером отображают такие диалоги. На рис. 14.9 приводится диалог, который отображался программой в процессе загрузки полного текста пяти выбранных сообщений, отсутствующих в локальном кэше (то есть еще не загруженных), в ответ на выполнение операции View (Просмотреть). После окончания загрузки все пять сообщений были отображены в отдельных всплывающих окнах просмотра.

Рис. 14.9. Неблокирующий диалог с информацией о ходе выполнения операции: просмотр

 

Такие операции с сервером, как и другие продолжительные операции, запускаются в по то ках вы пол не ния, чтобы избежать блокирования графического интерфейса. Это не мешает параллельно запускать другие операции, при условии, что вновь запускаемые операции не вступают в противоречие с уже выполняющимися. Например, одновременно может выполняться отправка нескольких писем и загрузка новой почты, параллельно с графическим интерфейсом — окна графического интерфейса могут перемещаться, перерисовываться и изменяться в размерах в процессе передачи почты. Другие операции обмена, такие как удаление писем, не должны позволять инициировать другие операции до своего завершения — операция удаления обновляет содержимое почтового ящика и внутренние кэши слишком радикально, чтобы поддерживать возможность параллельного выполнения других операций.

В системах, где нет поддержки многопоточной модели выполнения, PyMailGUI во время таких длительных операций переходит в заблокированное состояние (вместо операции порождения потока ставится заглушка, выполняющая простой вызов функции). Поскольку графический интерфейс без потоков выполнения оказывается фактически мертв, на таких платформах при перекрытии и открытии графического интерфейса другими окнами во время загрузки почты его содержимое стирается или каким-то образом искажается. По умолчанию потоки выполнения поддерживаются на большинстве платформ, где выполняется Python (включая Windows), поэтому вряд ли вы увидите такие странности на своем компьютере.

Использованная литература:

Марк Лутц — Программирование на Python, 4-е издание, II том, 2011

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