PySide6로 Python GUI 애플리케이션을 구축할 때, 오래 걸리는 백그라운드 작업을 수행하면 인터페이스가 "멈출" 수 있습니다. 이는 사용자 상호 작용, 신호 및 타이머를 처리하는 이벤트 루프가 이벤트에 의해 구동되고 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
