Pyqt5线程池怎么用
时间: 2023-07-23 11:15:17 浏览: 217
PyQt5中的线程池可以通过QThreadPool类来使用。以下是一个简单的示例,展示了如何在PyQt5中使用线程池:
```python
import sys
import time
from PyQt5.QtWidgets import QApplication, QMainWindow, QPushButton
from PyQt5.QtCore import QRunnable, QThreadPool
class Worker(QRunnable):
def __init__(self, name):
super().__init__()
self.name = name
def run(self):
# 模拟耗时任务
print(f"{self.name} started")
time.sleep(2)
print(f"{self.name} finished")
class MainWindow(QMainWindow):
def __init__(self):
super().__init__()
self.threadpool = QThreadPool()
print(f"Max thread count: {self.threadpool.maxThreadCount()}")
self.button = QPushButton("Start Task")
self.button.clicked.connect(self.start_task)
self.setCentralWidget(self.button)
def start_task(self):
# 创建并提交任务到线程池
worker = Worker("Task")
self.threadpool.start(worker)
if __name__ == '__main__':
app = QApplication(sys.argv)
window = MainWindow()
window.show()
sys.exit(app.exec_())
```
在这个示例中,我们创建了一个Worker类,它继承自QRunnable类,用于执行具体的任务。在run()方法中,我们模拟了一个耗时任务,并在开始和结束时打印相关信息。
MainWindow类是我们的主窗口类,其中包含一个按钮用于触发任务的开始。在start_task()方法中,我们创建了一个Worker实例,并将其提交给线程池进行执行。
通过QThreadPool类,我们可以控制线程池的最大线程数,并使用start()方法启动任务。注意,每次任务都会在可用的线程中执行,因此您可以同时运行多个任务,而不必等待前一个任务完成。
这只是使用PyQt5中线程池的基本示例,您可以根据实际需求进行适当的调整和扩展。
阅读全文