pta 银行业务队列简单模拟python
时间: 2025-05-15 13:01:06 浏览: 22
### Python 银行业务队列模拟实现
以下是基于银行业务队列的简单模拟示例代码,该程序通过 `queue.Queue` 来管理客户排队情况并处理业务请求。
#### 使用标准库中的 Queue 模块
Python 的 `Queue` 模块提供了线程安全的队列实现,适用于简单的银行队列场景。下面是一个完整的示例:
```python
import queue
import threading
import time
class BankSimulation:
def __init__(self, num_tellers=2):
self.customer_queue = queue.Queue() # 创建一个队列用于存储顾客
self.num_tellers = num_tellers # 告诉我们有多少个柜员
def add_customer(self, customer_id):
""" 添加新顾客到队列 """
self.customer_queue.put(customer_id)
def teller_job(self, teller_id):
""" 定义柜员的工作逻辑 """
while True:
try:
customer_id = self.customer_queue.get(timeout=5) # 获取下一个顾客
print(f"柜员 {teller_id} 正在服务顾客 {customer_id}")
time.sleep(2) # 模拟服务时间
print(f"柜员 {teller_id} 已完成服务顾客 {customer_id}")
self.customer_queue.task_done()
except queue.Empty:
print(f"柜员 {teller_id} 发现没有更多顾客,准备休息...")
break
def main():
simulation = BankSimulation(num_tellers=3) # 设置有三个柜员
# 启动柜员线程
threads = []
for i in range(simulation.num_tellers):
t = threading.Thread(target=simulation.teller_job, args=(i,))
threads.append(t)
t.start()
# 添加一些顾客进入队列
for j in range(10): # 总共有十个顾客
simulation.add_customer(j)
# 等待所有顾客被服务完毕
simulation.customer_queue.join()
if __name__ == "__main__":
main()
```
上述代码展示了如何利用多线程来模拟多个柜员同时工作的情况[^1]。每个柜员会从共享的队列中取出一位顾客进行服务,在一定时间内完成后继续取下一位直到队列为空为止。
#### 关键点解释
- **`queue.Queue()`**: 这是用来创建 FIFO (先进先出) 类型的数据结构实例。
- **`threading.Thread`**: 处理并发操作的核心组件之一;这里用来表示不同柜员可以独立运作而不互相干扰。
- **超时机制 (`timeout`) 和异常捕获**: 当前无可用资源时防止死锁发生,并允许系统优雅退出循环而非无限等待下去。
此方案不仅实现了基本功能需求还考虑到了实际应用环境下的鲁棒性和扩展性问题。
---
阅读全文
相关推荐


















