SeouliteLab

[Python/파이썬] PyQt5에서 Threadpool 사용하는 방법 본문

프로그래밍

[Python/파이썬] PyQt5에서 Threadpool 사용하는 방법

Seoulite Lab 2024. 3. 4. 09:01

PyQt5에서 Threadpool을 사용하면 다중 스레드를 효율적으로 관리할 수 있습니다. 이 블로그 포스트에서는 PyQt5에서 Threadpool을 사용하는 방법에 대해 자세히 알아보겠습니다. 각 예제는 다양한 시나리오에서 Threadpool을 구성하고 사용하는 방법을 보여줍니다.

1. 기본적인 Threadpool 생성

먼저 PyQt5에서 기본적인 Threadpool을 생성하는 방법을 살펴보겠습니다. ThreadPool 클래스를 사용하여 스레드 수를 지정하고 작업을 처리할 수 있습니다.

2. 작업 추가하기

ThreadPool에 작업을 추가하는 방법을 알아봅니다. 이를 통해 스레드 풀이 생성된 후에도 작업을 동적으로 추가할 수 있습니다.

3. 결과 처리하기

스레드가 완료되면 결과를 처리하는 방법을 살펴봅니다. PyQt5에서는 스레드가 완료되면 결과를 메인 스레드로 반환하여 GUI 업데이트 등의 작업을 수행할 수 있습니다.

4. 진행 상황 업데이트하기

작업이 진행되는 동안 진행 상황을 업데이트하는 방법을 살펴봅니다. ProgressBar 등의 GUI 요소를 사용하여 사용자에게 진행 상황을 시각적으로 표시할 수 있습니다.

5. 예외 처리하기

스레드 실행 중 발생하는 예외를 처리하는 방법을 살펴봅니다. 예외 처리를 통해 프로그램의 안정성을 높일 수 있습니다.

6. 스레드 간 통신하기

스레드 간에 데이터를 주고받는 방법을 살펴봅니다. PyQt5에서는 스레드 간에 데이터를 안전하게 전달할 수 있는 메커니즘을 제공합니다.

예제

예제 1: 기본적인 Threadpool 생성

from PyQt5.QtCore import QThreadPool
import time

class Worker(QRunnable):
    def run(self):
        print("Executing task")
        time.sleep(2)
        print("Task completed")

pool = QThreadPool()
worker = Worker()
pool.start(worker)

예제 2: 작업 추가하기

from PyQt5.QtCore import QThreadPool

, QRunnable
import time

class Worker(QRunnable):
    def run(self):
        print("Executing task")
        time.sleep(2)
        print("Task completed")

pool = QThreadPool()
worker = Worker()
pool.start(worker)

예제 3: 결과 처리하기

from PyQt5.QtCore import QThreadPool, QRunnable, QObject, pyqtSignal
import time

class Worker(QRunnable):
    def run(self):
        print("Executing task")
        time.sleep(2)
        print("Task completed")

class ResultHandler(QObject):
    finished = pyqtSignal()

    def handle_result(self):
        print("Result handled")

pool = QThreadPool()
worker = Worker()
handler = ResultHandler()
handler.finished.connect(handler.handle_result)

pool.start(worker)
handler.finished.emit()