python多线程实现代码(模拟银行服务操作流程)


Posted in Python onJanuary 13, 2020

1.模拟银行服务完成程序代码

目前,在以银行营业大厅为代表的窗口行业中大量使用排队(叫号)系统,该系统完全模拟了人群排队全过程,通过取票进队、排队等待、叫号服务等功能,代替了人们站队的辛苦。

排队叫号软件的具体操作流程为:

顾客取服务序号

当顾客抵达服务大厅时,前往放置在入口处旁的取号机,并按一下其上的相应服务按钮,取号机会自动打印出一张服务单。单上显示服务号及该服务号前面正在等待服务的人数。

服务员工呼叫顾客

服务员工只需按一下其柜台上呼叫器的相应按钮,则顾客的服务号就会按顺序的显示在显示屏上,并发出“叮咚”和相关语音信息,提示顾客前往该窗口办事。当一位顾客办事完毕后,柜台服务员工只需按呼叫器相应键,即可自动呼叫下一位顾客。

编写程序模拟上面的工作过程,主要要求如下:

程序运行后,当看到“请点击触摸屏获取号码:”的提示时,只要按回车键,即可显示“您的号码是: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多线程实现代码(模拟银行服务操作流程),希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对三水点靠木网站的支持!
如果你觉得本文对你有帮助,欢迎转载,烦请注明出处,谢谢!

Python 相关文章推荐
利用Python中的输入和输出功能进行读取和写入的教程
Apr 14 Python
Python求两个文本文件以行为单位的交集、并集与差集的方法
Jun 17 Python
Python文件处理
Feb 29 Python
详解Golang 与python中的字符串反转
Jul 21 Python
基于Python中单例模式的几种实现方式及优化详解
Jan 09 Python
Python+PIL实现支付宝AR红包
Feb 09 Python
对Python3.x版本print函数左右对齐详解
Dec 22 Python
使用Python paramiko模块利用多线程实现ssh并发执行操作
Dec 05 Python
mac使用python识别图形验证码功能
Jan 10 Python
Python dict的常用方法示例代码
Jun 23 Python
利用Python中的Xpath实现一个在线汇率转换器
Sep 09 Python
pygame面向对象的飞行小鸟实现(Flappy bird)
Apr 01 Python
Python timeit模块的使用实践
Jan 13 #Python
Python 列表的清空方式
Jan 13 #Python
Python SSL证书验证问题解决方案
Jan 13 #Python
python清空命令行方式
Jan 13 #Python
Pytorch GPU显存充足却显示out of memory的解决方式
Jan 13 #Python
Python开发之基于模板匹配的信用卡数字识别功能
Jan 13 #Python
python中的itertools的使用详解
Jan 13 #Python
You might like
php中使用Akismet防止垃圾评论的代码
2011/06/10 PHP
PHP使用OB缓存实现静态化功能示例
2019/03/23 PHP
laravel 实现划分admin和home 模块分组
2019/10/15 PHP
Chosen 基于jquery的选择框插件使用方法
2012/05/30 Javascript
jQuery中获取Radio元素值的方法
2013/07/02 Javascript
禁止空格提交表单的js代码
2013/11/17 Javascript
js使用html()或text()方法获取设置p标签的显示的值
2014/08/01 Javascript
JavaScript获取伪元素(Pseudo-Element)属性的方法技巧
2015/03/13 Javascript
Javascript常用小技巧汇总
2015/06/24 Javascript
jQuery Mobile操作HTML5的常用函数总结
2016/05/17 Javascript
JS获得多个同name 的input输入框的值的实现方法
2017/01/09 Javascript
微信小程序之数据缓存的实例详解
2017/09/29 Javascript
微信小程序排坑指南详解
2018/05/23 Javascript
Rollup处理并打包JS文件项目实例代码
2018/05/31 Javascript
Vue中使用vux配置代码详解
2018/09/16 Javascript
微信小程序系列之自定义顶部导航功能
2019/05/21 Javascript
微信小程序实现页面跳转传递参数(实体,对象)
2019/08/12 Javascript
js实现开关灯效果
2020/03/30 Javascript
微信小程序利用button控制条件标签的变量问题
2020/03/15 Javascript
微信小程序实现点击导航标签滚动定位到对应位置
2020/11/19 Javascript
js面向对象方式实现拖拽效果
2021/03/03 Javascript
python实现数据预处理之填充缺失值的示例
2017/12/22 Python
Python正则表达式和re库知识点总结
2019/02/11 Python
解决pycharm remote deployment 配置的问题
2019/06/27 Python
详解使用django-mama-cas快速搭建CAS服务的实现
2019/10/30 Python
pyinstaller打包成无控制台程序时运行出错(与popen冲突的解决方法)
2020/04/15 Python
html5实现九宫格抽奖可固定抽中某项奖品
2020/06/15 HTML / CSS
Lookfantastic挪威官网:英国知名美妆购物网站
2017/07/26 全球购物
HealthElement海外旗舰店:新西兰大卖场
2018/02/23 全球购物
洛杉矶健身中心女性专用运动服饰品牌:Marika
2018/05/09 全球购物
Why do we need Unit test
2013/01/03 面试题
设计4个线程,其中两个线程每次对j增加1,另外两个线程对j每次减少1。写出程序。
2014/12/30 面试题
什么是封装
2013/03/26 面试题
家长会演讲稿范文
2014/01/10 职场文书
学前班评语大全
2014/05/04 职场文书
骨干教师考核方案
2014/05/09 职场文书