Python多线程模拟银行排队叫号系统实现

拾柒
拾柒
发布时间:2026-10-13 | 4人浏览过
原创

本文介绍如何使用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多线程实现代码(模拟银行服务操作流程),希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对本站网站的支持! 如果你觉得本文对你有帮助,欢迎转载,烦请注明出处,谢谢!

相关标签:

本站声明

本文内容仅供参考,不代表本站观点。转载或引用请注明出处。如发现内容问题,请通过联系我们页面反馈。

Python 相关产品和应用

全部下载

专题列表