pyside2 线程池等待任务完成,再继续后面的线程
时间: 2023-05-16 13:06:47 浏览: 100
可以使用QThreadPool和QRunnable来实现线程池等待任务完成的功能。具体实现可以参考以下代码:
```python
from PySide2.QtCore import QThreadPool, QRunnable, QObject, Signal, Slot
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(2)
print(f"Task {self.num} finished")
class Manager(QObject):
finished = Signal()
def __init__(self):
super().__init__()
self.pool = QThreadPool.globalInstance()
self.pool.setMaxThreadCount(2)
self.tasks = [Worker(i) for i in range(5)]
self.current_task = 0
def start(self):
self.pool.start(self.tasks[self.current_task])
self.tasks[self.current_task].finished.connect(self.on_task_finished)
@Slot()
def on_task_finished(self):
self.current_task += 1
if self.current_task < len(self.tasks):
self.pool.start(self.tasks[self.current_task])
self.tasks[self.current_task].finished.connect(self.on_task_finished)
else:
self.finished.emit()
manager = Manager()
manager.finished.connect(lambda: print("All tasks finished"))
manager.start()
```
这段代码创建了一个Manager类,其中包含了一个QThreadPool和一些QRunnable任务。在start方法中,首先启动第一个任务,然后在该任务完成后再启动下一个任务,直到所有任务都完成。可以看到,这个线程池会等待任务完成后再继续执行后面的线程。