自己编写并发编程的时候, 自己想实现一个框架, 那么我在多个子任务执行后,如何知道所有子任务都已经执行完毕, 设计一个这样的系统,python语言实现出来
时间: 2024-03-07 17:49:55 浏览: 18
可以使用Python的`threading`模块来实现并发编程。下面是一个使用`threading`模块的示例代码,演示如何实现一个并发任务的框架,并在所有任务完成后输出结果。
```python
import threading
class TaskManager:
def __init__(self, task_count):
self.task_count = task_count
self.tasks_done = 0
self.lock = threading.Lock()
self.done_condition = threading.Condition(self.lock)
def task_completed(self):
with self.lock:
self.tasks_done += 1
if self.tasks_done == self.task_count:
self.done_condition.notify()
def wait_for_completion(self):
with self.lock:
while self.tasks_done < self.task_count:
self.done_condition.wait()
def task(task_id):
print("Starting task", task_id)
# Do some work here
print("Task", task_id, "completed")
manager.task_completed()
manager = TaskManager(4)
for i in range(4):
thread = threading.Thread(target=task, args=(i,))
thread.start()
manager.wait_for_completion()
print("All tasks completed")
```
上述代码中,我们首先定义了一个`TaskManager`类来管理所有子任务。在类的构造函数中,我们初始化了计数器和锁。`task_completed`方法在每个子任务完成时被调用,它会通过锁来保证线程安全,并在所有任务完成时通过条件变量来通知主线程。`wait_for_completion`方法会在所有子任务完成前一直等待,直到收到通知后才会继续执行。
在`task`函数中,我们模拟了一个子任务,并在开始和结束时输出一些信息。每个子任务完成后,都会调用`manager.task_completed()`方法来通知`TaskManager`对象。
最后,我们创建了四个线程来执行子任务,并等待它们全部完成后输出一条消息。如果你想执行不同数量的任务,只需要更改`TaskManager`对象的构造函数参数即可。
运行上述代码,你应该可以看到类似于以下输出:
```
Starting task 0
Starting task 1
Starting task 2
Starting task 3
Task 0 completed
Task 1 completed
Task 2 completed
Task 3 completed
All tasks completed
```
这表明所有子任务都已经成功完成。