안녕하세요.
오늘은 Python에 내장되어 있는 threading과 PyQt5dml QThread의 차이점에 대해 이야기하겠습니다.
threading 쓰레드 역할을하고, QThread도 쓰레드 역할을 합니다.
하지만 분명히 둘의 차이가 있습니다.
우선, 쓰레드에 대해 애매하시다면 아래 글을 보시면 됩니다.
https://coding-yoon.tistory.com/45
저번 글과 똑같이 QThread에 구현하겠습니다.
#쓰레드를 선언한 간단한 예제
from PyQt5.QtWidgets import *
from PyQt5.QtCore import *
import time
import sys
#쓰레드 선언
class Thread1(QThread):
#parent = MainWidget을 상속 받음.
def __init__(self, parent=None):
super().__init__(parent)
def run(self):
for i in range(10):
print("Thread :",i)
time.sleep(1)
class MainWidget(QWidget):
def __init__(self):
super().__init__()
thread_start = QPushButton("시 작!")
thread_start.clicked.connect(self.increaseNumber)
vbox = QVBoxLayout()
vbox.addWidget(thread_start)
self.resize(200,200)
self.setLayout(vbox)
def increaseNumber(self):
x = Thread1(self)
x.start()
if __name__ == '__main__':
app = QApplication(sys.argv)
widget = MainWidget()
widget.show()
sys.exit(app.exec_())
이번엔 Python threading을 이용해 쓰레드를 구현하겠습니다.
#threading을 이용해 쓰레드 구현
from PyQt5.QtWidgets import *
import threading
import time
import sys
#쓰레드 선언
class Thread1(threading.Thread):
def __init__(self, parent=None):
super().__init__(parent)
def run(self):
for i in range(10):
print("Thread :",i)
time.sleep(1)
class MainWidget(QWidget):
def __init__(self):
super().__init__()
thread_start = QPushButton("시 작!")
thread_start.clicked.connect(self.increaseNumber)
vbox = QVBoxLayout()
vbox.addWidget(thread_start)
self.resize(200,200)
self.setLayout(vbox)
def increaseNumber(self):
x = Thread1()
x.start()
if __name__ == '__main__':
app = QApplication(sys.argv)
widget = MainWidget()
widget.show()
sys.exit(app.exec_())
두 개의 차이점을 아시겠나요?
threading은 gui가 종료되어도 하나의 쓰레드로서 자신의 일을 마칠 때까지 쓰레드가 돌아가는 반면에,
QThread는 gui가 꺼지면, 같이 쓰레드가 종료됩니다.
728x90
반응형