При построении графических интерфейсов приложений Python с помощью PySide6 интерфейс может «зависнуть», когда выполняются длительные задачи в фоновом режиме. Это связано с тем, что цикл событий, который обрабатывает взаимодействие пользователя, сигналы и таймеры, управляется событиями и работает в том же потоке, что и код Python. Любое выполнение, вызванное циклом событий, будет работать синхронно в этом потоке, что приводит к замораживанию GUI, если задача занимает много времени. Чтобы избежать этого, длительные задачи следует переместить из потока GUI в другой поток. Предоставляется минимальное приложение-скелет для демонстрации многопоточного выполнения в PySide6. Неправильный подход к решению этой проблемы заключается в использовании метода processEvents(), который может привести к непредсказуемому поведению и неопределённым результатам. Вместо этого можно использовать потоки и процессы для выполнения независимых задач в приложении PySide6. Qt предоставляет простой интерфейс для выполнения задач или заданий в других потоках с помощью QRunnable и QThreadPool. Этот подход позволяет легко ставить в очередь и выполнять рабочие задачи и получать результаты. Используя QThreadPool, приложение может обрабатывать длительные задачи без замораживания GUI.
pythonguis.com
Python GUIs: Multithreading PySide6 applications with QThreadPool — Run background tasks concurrently without impacting your UI
