如何使用多线程技术来模拟果园里两位果农同时采摘5棵苹果树的情景,每棵树采摘时间间隔为1秒,并详细说明他们的采摘进度是如何实时更新的?
时间: 2024-12-28 12:31:04 浏览: 0
在Python中,我们可以使用`threading`模块来模拟这个情景。首先,创建两个线程分别代表两位果农,每个线程负责一棵苹果树。这里我们将使用`time.sleep()`函数来模拟采摘的时间间隔,`Queue`来存储每棵树的采摘状态以便于更新。
```python
import threading
from queue import Queue
class FruitPicker(threading.Thread):
def __init__(self, tree_id, apple_trees, update_queue):
super().__init__()
self.tree_id = tree_id
self.apple_trees = apple_trees
self.update_queue = update_queue
self.is_picking = False
def run(self):
for _ in range(5): # 每棵树采摘5次
if not self.is_picking:
print(f"果农{self.tree_id}开始采摘第{self.tree_id * 5 + _+1}个苹果")
self.update_queue.put((self.tree_id, "采摘"))
self.is_picking = True
time.sleep(1) # 模拟采摘1秒
self.update_queue.put((self.tree_id, "等待"))
self.is_picking = False
else:
time.sleep(0.5) # 果农正在采摘,等待1秒后再检查下一个动作
def update_status(queue):
while True:
action, data = queue.get()
print(f"果树{data}状态更新: {action}")
queue.task_done()
# 创建两个果农线程
apple_trees = ["树1", "树2"]
update_queue = Queue()
picker1 = FruitPicker(1, apple_trees, update_queue)
picker2 = FruitPicker(2, apple_trees, update_queue)
# 启动更新状态的独立线程
status_thread = threading.Thread(target=update_status, args=(update_queue,))
status_thread.start()
# 启动果农线程
picker1.start()
picker2.start()
picker1.join() # 等待第一个果农完成
picker2.join() # 等待第二个果农完成
status_thread.join() # 确保状态更新线程也完成
阅读全文