QThreadPool例子
时间: 2024-01-26 07:42:21 浏览: 16
下面是一个简单的使用 `QThreadPool` 的例子:
```python
from PyQt5.QtCore import QRunnable, QThreadPool, QObject, pyqtSignal
import time
class Worker(QRunnable):
def __init__(self, num):
super().__init__()
self.num = num
def run(self):
print(f"Task {self.num} started")
time.sleep(1)
print(f"Task {self.num} finished")
class MyObject(QObject):
finished = pyqtSignal()
def __init__(self):
super().__init__()
self.pool = QThreadPool.globalInstance()
def start_tasks(self):
for i in range(5):
worker = Worker(i)
self.pool.start(worker)
self.pool.waitForDone()
self.finished.emit()
if __name__ == "__main__":
obj = MyObject()
obj.finished.connect(lambda: print("All tasks finished"))
obj.start_tasks()
```
这个例子中,我们定义了一个 `Worker` 类,它继承自 `QRunnable`,并且实现了 `run` 方法。`run` 方法中模拟了一个耗时的任务,即等待 1 秒钟。
然后我们定义了一个 `MyObject` 类,它继承自 `QObject`,并且包含一个 `finished` 信号和一个 `start_tasks` 方法。在 `start_tasks` 方法中,我们创建了 5 个 `Worker` 对象,并且使用 `QThreadPool` 的 `start` 方法将它们加入线程池中。
最后,我们创建了一个 `MyObject` 对象,并且调用了它的 `start_tasks` 方法。当所有任务完成后,`MyObject` 发射了 `finished` 信号,我们可以连接这个信号的槽函数来进行后续处理。