模拟三个老师同时给50个小朋友发苹果,每个老师相当于一个线程,每个小朋友发一个苹果,按照小朋友的顺序有序分发,利用多线程模拟老师发苹果过程。
时间: 2024-01-16 16:03:08 浏览: 90
好的,这是一个典型的生产者-消费者问题,可以使用多线程和队列来实现。以下是代码示例:
```python
import threading
import queue
class Teacher(threading.Thread):
def __init__(self, name, apples, queue):
super().__init__()
self.name = name
self.apples = apples
self.queue = queue
def run(self):
while True:
try:
# 获取下一个小朋友
child = self.queue.get(block=False)
except queue.Empty:
# 如果队列为空,说明所有小朋友都已经分配完毕,退出循环
break
else:
# 给小朋友分配一个苹果
print(f"{self.name}给{child}分配了一个苹果")
self.apples[child] += 1
def main():
# 初始化苹果数量和队列
n_children = 50
apples = [0] * n_children
queue = queue.Queue(maxsize=n_children)
# 将所有小朋友加入队列
for i in range(n_children):
queue.put(i)
# 创建三个老师线程
teachers = []
for i in range(3):
teacher = Teacher(f"Teacher-{i+1}", apples, queue)
teachers.append(teacher)
teacher.start()
# 等待所有老师线程结束
for teacher in teachers:
teacher.join()
# 输出每个小朋友得到的苹果数量
for i, apple in enumerate(apples):
print(f"Child-{i+1}得到了{apple}个苹果")
if __name__ == '__main__':
main()
```
运行以上代码,会输出每个小朋友得到的苹果数量,例如:
```
Teacher-1给1分配了一个苹果
Teacher-2给2分配了一个苹果
Teacher-3给3分配了一个苹果
...
Child-1得到了3个苹果
Child-2得到了3个苹果
Child-3得到了3个苹果
...
```
阅读全文