Python多线程模拟银行排队叫号系统实现
本文介绍如何使用Python多线程技术模拟银行营业大厅的排队叫号流程。通过自定义队列类与线程类,实现顾客取号、等待人数统计及窗口呼叫功能。代码展示了线程启动、锁机制及时间延迟模拟,完整还原从取号到服务的交互逻辑,适用于学习并发编程与线程同步机制。
Python多线程模拟银行排队叫号系统实现
模拟银行服务完成程序代码
当前,在银行营业大厅等窗口服务行业中,排队叫号系统已得到广泛应用。该系统完整模拟了人群排队的整个流程,通过取票进队、排队等待以及叫号服务等功能,有效替代了人工站队的繁琐过程。
排队叫号软件的具体操作流程如下:
顾客取服务序号
当顾客到达服务大厅时,需前往入口处的取号机,并按下对应的服务按钮。取号机将自动打印出一张服务单,单据上会显示当前获取的服务号码,以及该号码前方正在等待服务的人数。
服务员工呼叫顾客
服务人员只需按下柜台呼叫器上的相应按钮,显示屏便会按顺序显示顾客的服务号,并伴随“叮咚”声及相关语音提示,引导顾客前往指定窗口办理业务。当一位顾客办理完毕后,柜台服务人员再次按下呼叫键,系统即可自动呼叫下一位顾客。
程序功能需求与交互逻辑
编写程序模拟上述工作过程,主要要求如下:
程序运行后,当屏幕显示“请点击触摸屏获取号码:”提示时,用户只需按回车键,即可看到“您的号码是:XXX,您前面有 YYY 位”的反馈。其中,XXX 代表所获得的服务号码,YYY 表示在 XXX 之前到达且正在等待服务的人数。
利用多线程技术模拟服务窗口(支持多窗口),实现服务员呼叫顾客的行为。假设每位顾客的服务时间为 10000ms,时间结束后,系统将显示“请 XXX 号到 ZZZ 号窗口!”的提示,其中 ZZZ 代表即将为该客户服务的具体窗口编号。
代码:
以下为 Python 实现方案:
核心代码实现与多线程处理
from Task04_Queue.linkedQueue import LinkedQueue
import threading
import time
class LinkBankQueue(LinkedQueue):
def __init__(self):
LinkedQueue.__init__(self)
self.callNumber = 0
def getCallNumber(self):
if self.is_empty() and self.callNumber == 0:
self.callNumber = 1
else:
self.callNumber += 1
return self.callNumber
def getLength(self):
if self.is_empty():
return 0
else:
cur = self._head
len = 1
while cur != self._tail:
cur = cur.next
len += 1
return len
# 服务器
class ServiceWindow(threading.Thread):
def __init__(self):
threading.Thread.__init__(self)
self.bankQueue = None
self.lock = threading.Lock()
def service(self):
self.lock.acquire()
while True:
time.sleep(20)
try:
if not self.bankQueue.is_empty():
print('请 %d 号到 %s 号窗口' % (self.bankQueue._head.data, threading.current_thread().name))
self.bankQueue.dequeue()
# time.sleep(10)
else:
print('队列为空哦')
finally:
self.lock.release()
# 客户端
if __name__ == '__main__':
bankQueue = LinkBankQueue()
windowcount = 2
serviceWindows = [None] * windowcount
threadList = [None] * windowcount
for i in range(windowcount):
serviceWindows[i] = ServiceWindow()
serviceWindows[i].bankQueue = bankQueue
threadList[i] = threading.Thread(name=(i + 1), target=serviceWindows[i].service, args=())
threadList[i].start()
while True:
input('请点击触摸屏获取号码:')
callNumber = bankQueue.getCallNumber()
if bankQueue != None:
print('您的号码是:%d,您前面有 %d 位' % (callNumber, bankQueue.getLength()))
bankQueue.enqueue(callNumber)
else:
print('您的号码是:%d,您前面有 0 位' % (callNumber))
结果截图:

总结
以上所述是小编给大家介绍的python多线程实现代码(模拟银行服务操作流程),希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对本站网站的支持! 如果你觉得本文对你有帮助,欢迎转载,烦请注明出处,谢谢!
免责声明:本文内容仅供参考,不代表本站观点。转载或引用请注明出处。









