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处理JSON数据并生成条形图
Aug 05 Python
Matplotlib 生成不同大小的subplots实例
May 25 Python
Pycharm+Python+PyQt5使用详解
Sep 25 Python
树莓派4B+opencv4+python 打开摄像头的实现方法
Oct 18 Python
OpenCV模板匹配matchTemplate的实现
Oct 18 Python
numpy.array 操作使用简单总结
Nov 08 Python
Django框架之中间件MiddleWare的实现
Dec 30 Python
使用tensorflow实现VGG网络,训练mnist数据集方式
May 26 Python
python实现测试工具(二)——简单的ui测试工具
Oct 19 Python
python和C++共享内存传输图像的示例
Oct 27 Python
python3中布局背景颜色代码分析
Dec 01 Python
Python操作CSV格式文件的方法大全
Jul 15 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出现Cannot modify header information问题的解决方法大全
2008/04/09 PHP
php数组函数序列 之array_count_values() 统计数组中所有值出现的次数函数
2011/10/29 PHP
php实现快速排序的三种方法分享
2014/03/12 PHP
php生成二维码时出现中文乱码的解决方法
2014/12/18 PHP
php+ajax无刷新上传图片实例代码
2015/11/17 PHP
laravel-admin表单提交隐藏一些数据,回调时获取数据的方法
2019/10/08 PHP
php将字符串转换为数组实例讲解
2020/05/05 PHP
js活用事件触发对象动作
2008/08/10 Javascript
jQuery hover 延时器实现代码
2011/03/12 Javascript
Jquery中LigerUi的弹出编辑框(实现方法)
2013/07/09 Javascript
判断及设置浏览器全屏模式
2014/04/20 Javascript
javascript实现获取服务器时间
2015/05/19 Javascript
js实现砖头在页面拖拉效果
2020/11/20 Javascript
angularjs+bootstrap菜单的使用示例代码
2017/03/07 Javascript
Vue.js 插件开发详解
2017/03/29 Javascript
Vue.js实现网格列表布局转换方法
2017/08/25 Javascript
使用bootstrap实现下拉框搜索功能的实例讲解
2018/08/10 Javascript
详解ES6 系列之异步处理实战
2018/10/26 Javascript
vue实践---根据不同环境,自动转换请求的url地址操作
2020/09/21 Javascript
Python六大开源框架对比
2015/10/19 Python
全面了解python中的类,对象,方法,属性
2016/09/11 Python
pyqt5自定义信号实例解析
2018/01/31 Python
Python字符串通过'+'和join函数拼接新字符串的性能测试比较
2019/03/05 Python
基于python实现的百度音乐下载器python pyqt改进版(附代码)
2019/08/05 Python
浅谈SciPy中的optimize.minimize实现受限优化问题
2020/02/29 Python
如何快速一次性卸载所有python包(第三方库)呢
2020/10/20 Python
基于Html5实现的react拖拽排序组件示例
2018/08/13 HTML / CSS
Meli Melo官网:名媛们钟爱的英国奢侈手包品牌
2017/04/17 全球购物
delegate与普通函数的区别
2014/01/22 面试题
小学生开学感言
2014/02/28 职场文书
企业管理毕业生求职信
2014/03/11 职场文书
入党积极分子自我批评思想汇报
2014/10/10 职场文书
离婚协议书格式范本
2016/03/18 职场文书
世界上超棒的8种逻辑思维
2019/08/06 职场文书
详解Node.js如何处理ES6模块
2021/05/15 Javascript
golang定时器
2022/04/14 Golang