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 相关文章推荐
浅谈numpy数组的几种排序方式
Dec 15 Python
Python3+django2.0+apache2+ubuntu14部署网站上线的方法
Jul 07 Python
python配置grpc环境
Jan 01 Python
对python实现合并两个排序链表的方法详解
Jan 23 Python
Python实现的服务器示例小结【单进程、多进程、多线程、非阻塞式】
May 23 Python
Python3enumrate和range对比及示例详解
Jul 13 Python
python 直接赋值和copy的区别详解
Aug 07 Python
Python中的引用和拷贝实例解析
Nov 14 Python
Python cookie的保存与读取、SSL讲解
Feb 17 Python
Python文件时间操作步骤代码详解
Apr 13 Python
python中通过pip安装库文件时出现“EnvironmentError: [WinError 5] 拒绝访问”的问题及解决方案
Aug 11 Python
Python实现灰色关联分析与结果可视化的详细代码
Mar 25 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&&mysql)六
2006/10/09 PHP
PHP持久连接mysql_pconnect()函数使用介绍
2012/02/05 PHP
php array的学习笔记
2012/05/10 PHP
linux实现php定时执行cron任务详解
2013/12/24 PHP
Mac系统下安装PHP Xdebug
2018/03/30 PHP
Javascript客户端将指定区域导出到Word、Excel的代码
2008/10/22 Javascript
jQuery autocomplete插件修改
2009/04/17 Javascript
解析使用js判断只能输入数字、字母等验证的方法(总结)
2013/05/14 Javascript
jQuery中ajax的get()方法用法实例
2014/12/26 Javascript
谈谈基于iframe、FormData、FileReader三种无刷新上传文件的方法
2015/12/03 Javascript
bootstrap table复杂操作代码
2016/11/01 Javascript
利用HTML5+Socket.io实现摇一摇控制PC端歌曲切换
2017/01/13 Javascript
Vue.js路由vue-router使用方法详解
2017/03/20 Javascript
解决ionic和angular上拉加载的问题
2017/08/03 Javascript
使用puppeteer破解极验的滑动验证码
2018/02/24 Javascript
Vue项目webpack打包部署到Tomcat刷新报404错误问题的解决方案
2018/05/15 Javascript
Vue前后端不同端口的实现方法
2018/09/19 Javascript
Vue中插入HTML代码的方法
2018/09/21 Javascript
vue2.0+vue-router构建一个简单的列表页的示例代码
2019/02/13 Javascript
原生JS与CSS实现软件卸载对话框功能
2019/12/05 Javascript
详解Vue中的Props与Data细微差别
2020/03/02 Javascript
python用reduce和map把字符串转为数字的方法
2016/12/19 Python
用python制作游戏外挂
2018/01/04 Python
Django基于ORM操作数据库的方法详解
2018/03/27 Python
Python2和Python3之间的str处理方式导致乱码的讲解
2019/01/03 Python
python爬虫 正则表达式解析
2019/09/28 Python
基于python实现MQTT发布订阅过程原理解析
2020/07/27 Python
美国价格实惠的在线眼镜网站:Zeelool
2020/12/25 全球购物
strlen的几种不同实现方法
2013/05/31 面试题
高校生生产实习自我鉴定
2013/09/21 职场文书
竞聘副主任科员演讲稿
2014/01/11 职场文书
学校四风问题对照检查材料思想汇报
2014/09/26 职场文书
党员个人剖析材料
2014/09/30 职场文书
小学优秀教师材料
2014/12/15 职场文书
单位领导婚礼致辞
2015/07/28 职场文书
防止web项目中的SQL注入
2021/12/06 MySQL