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 相关文章推荐
Ubuntu 14.04+Django 1.7.1+Nginx+uwsgi部署教程
Nov 18 Python
Python网站验证码识别
Jan 25 Python
Python将多份excel表格整理成一份表格
Jan 03 Python
Python中顺序表的实现简单代码分享
Jan 09 Python
详解多线程Django程序耗尽数据库连接的问题
Oct 08 Python
python将txt文档每行内容循环插入数据库的方法
Dec 28 Python
简单了解python协程的相关知识
Aug 31 Python
原生python实现knn分类算法
Oct 24 Python
使用Nibabel库对nii格式图像的读写操作
Jul 01 Python
python 模拟登陆github的示例
Dec 04 Python
完美处理python与anaconda环境变量的冲突问题
Apr 07 Python
python函数的两种嵌套方法使用
Apr 02 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
PHPMyAdmin 快速配置方法
2009/05/11 PHP
Codeigniter生成Excel文档的简单方法
2014/06/12 PHP
PHP中文竖排转换实现方法
2015/10/23 PHP
php实现贪吃蛇小游戏
2016/07/26 PHP
php5.3后静态绑定用法详解
2016/11/11 PHP
基于jquery的兼容各种浏览器的iframe自适应高度的脚本
2010/08/13 Javascript
腾讯UED 漂亮的提示信息效果代码
2011/09/12 Javascript
javascript错误的认识不用关心内存管理
2012/12/15 Javascript
让图片旋转任意角度及JQuery插件使用介绍
2013/03/20 Javascript
JS命名空间的另一种实现
2013/08/09 Javascript
Javascript中各种trim的实现详细解析
2013/12/10 Javascript
检测一个函数是否是JavaScript原生函数的小技巧
2015/03/13 Javascript
jquery实现可自动收缩的TAB网页选项卡代码
2015/09/06 Javascript
jQuery插件简单学习实例教程
2016/07/01 Javascript
switch语句的妙用(必看篇)
2016/10/03 Javascript
详解AngularJS ng-class样式切换
2017/06/27 Javascript
jQuery实现base64前台加密解密功能详解
2017/08/29 jQuery
基于ajax和jsonp的原生封装(实例)
2017/10/16 Javascript
原生JS+CSS实现炫酷重力模拟弹跳系统的登录页面
2017/11/01 Javascript
对vue2.0中.vue文件页面跳转之.$router.push的用法详解
2018/08/24 Javascript
JS 验证码功能的三种实现方式
2018/11/26 Javascript
微信小程序云开发使用方法新手初体验
2019/05/16 Javascript
微信小程序wx.navigateTo中events属性实现页面间通信传值,数据同步
2019/07/13 Javascript
JavaScript创建、读取和删除cookie
2019/09/03 Javascript
JSX在render函数中的应用详解
2019/09/04 Javascript
Vue之Mixins(混入)的使用方法
2019/09/24 Javascript
[02:31]2018年度DOTA2最具人气选手-完美盛典
2018/12/16 DOTA
python安装教程 Pycharm安装详细教程
2017/05/02 Python
浅析Python四种数据类型
2018/09/26 Python
在python中pandas的series合并方法
2018/11/12 Python
pycharm不能运行.py文件的解决方法
2020/02/12 Python
平安工地建设方案
2014/05/06 职场文书
职员竞岗演讲稿
2014/05/14 职场文书
汉语言文学专业求职信
2014/06/19 职场文书
起诉意见书范文
2015/05/19 职场文书
2016年保险公众宣传日活动总结
2016/04/05 职场文书