qtpy.QtCoreQThread()的线程同步和互斥操作实例
发布时间:2024-01-17 21:12:08
在Python中,可以使用qtpy.QtCore.QThread类来创建一个线程。QThread类为线程的管理和控制提供了便利,包括线程同步和互斥操作。
下面是一个QThread的线程同步和互斥操作的示例:
import qtpy.QtCore as QtCore
class Worker(QtCore.QThread):
def __init__(self):
super().__init__()
def run(self):
for i in range(5):
# 线程同步操作,打印当前线程的ID和计数值
print(f"Thread ID: {self.currentThreadId()} - Count: {i}")
self.msleep(1000)
class MainWindow(QtCore.QMainWindow):
def __init__(self):
super().__init__()
self.worker = Worker()
self.initUI()
# 连接信号和槽
self.worker.started.connect(self.on_worker_started)
self.worker.finished.connect(self.on_worker_finished)
def initUI(self):
self.setGeometry(100, 100, 300, 200)
self.setWindowTitle('Thread Example')
self.startButton = QtWidgets.QPushButton("Start", self)
self.startButton.setGeometry(QtCore.QRect(100, 100, 100, 30))
self.startButton.clicked.connect(self.start_worker)
def start_worker(self):
self.startButton.setEnabled(False)
# 启动线程
self.worker.start()
def on_worker_started(self):
print("Worker started")
def on_worker_finished(self):
print("Worker finished")
self.startButton.setEnabled(True)
if __name__ == '__main__':
app = QtWidgets.QApplication([])
mainWindow = MainWindow()
mainWindow.show()
app.exec_()
在这个例子中,我们创建了一个Worker类,继承自QThread类,并重写了run()方法,在run()方法内执行线程的任务。在任务的过程中,我们使用了线程同步操作,通过调用self.currentThreadId()方法来获取当前线程的ID,并打印出来。我们还使用了self.msleep(1000)来使当前线程休眠1秒,以便在每次执行次数间有间隔。
在MainWindow类中,我们创建了一个按钮,用于启动Worker线程。在start_worker()方法中,我们禁用按钮,然后启动Worker线程。在Worker线程启动和结束时,我们连接了相应的槽函数(on_worker_started()和on_worker_finished())。
这个例子演示了如何使用QThread类来创建一个工作线程,并实现线程同步和互斥操作。同时注意到,由于QThread是在QT中的类,所以我们还需要导入相应的模块来使用它们。
