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 相关文章推荐
Java Web开发过程中登陆模块的验证码的实现方式总结
May 25 Python
利用python批量检查网站的可用性
Sep 09 Python
python kmeans聚类简单介绍和实现代码
Feb 23 Python
使用实现pandas读取csv文件指定的前几行
Apr 20 Python
Python生成短uuid的方法实例详解
May 29 Python
对Python 数组的切片操作详解
Jul 02 Python
可能是最全面的 Python 字符串拼接总结【收藏】
Jul 09 Python
python3 面向对象__类的内置属性与方法的实例代码
Nov 09 Python
django框架事务处理小结【ORM 事务及raw sql,customize sql 事务处理】
Jun 27 Python
Pycharm内置终端及远程SSH工具的使用教程图文详解
Mar 19 Python
如何真正的了解python装饰器
Aug 14 Python
python如何绘制疫情图
Sep 16 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
数据库相关问题
2006/10/09 PHP
用phpmyadmin更改mysql5.0登录密码
2008/03/25 PHP
PHP添加MySQL数据记录代码
2008/06/07 PHP
PHP递归遍历指定目录的文件并统计文件数量的方法
2015/03/24 PHP
javascript 定义新对象方法
2010/02/20 Javascript
理解Javascript_03_javascript全局观
2010/10/11 Javascript
js跑马灯代码(自写)
2013/04/17 Javascript
防止xss和sql注入:JS特殊字符过滤正则
2013/04/18 Javascript
node.js中的fs.writeSync方法使用说明
2014/12/15 Javascript
javascript实现简单查找与替换的方法
2015/07/22 Javascript
jQuery实现的漂亮表单效果代码
2015/08/18 Javascript
jQuery的文档处理程序详解
2016/05/10 Javascript
JS实现拖拽的方法分析
2016/12/20 Javascript
vue-resource + json-server模拟数据的方法
2017/11/02 Javascript
JS实现前端页面的搜索功能
2018/06/12 Javascript
详解如何使用webpack打包多页jquery项目
2019/02/01 jQuery
JavaScript JSON数据处理全集(小结)
2019/08/15 Javascript
浅析vue中的provide / inject 有什么用处
2019/11/10 Javascript
python模块之StringIO使用示例
2015/04/08 Python
Django中redis的使用方法(包括安装、配置、启动)
2018/02/21 Python
numpy.linalg.eig() 计算矩阵特征向量方式
2019/11/29 Python
Python scrapy增量爬取实例及实现过程解析
2019/12/24 Python
Jupyter notebook 启动闪退问题的解决
2020/04/13 Python
基于python实现百度语音识别和图灵对话
2020/11/02 Python
CSS3中的5个有趣的新技术
2009/04/02 HTML / CSS
彻底弄明白CSS3的Media Queries(跨平台设计)
2010/07/27 HTML / CSS
解决H5的a标签的download属性下载service上的文件出现跨域问题
2019/07/16 HTML / CSS
Html5适配iphoneX刘海屏的简单实现
2019/04/09 HTML / CSS
Vans英国官方网站:美国南加州的原创极限运动潮牌
2017/01/20 全球购物
学习保证书怎么写
2015/02/26 职场文书
文言文辞职信
2015/02/28 职场文书
教师求职信怎么写
2015/03/20 职场文书
幼儿园亲子活动感想
2015/08/07 职场文书
使用Pytorch训练two-head网络的操作
2021/05/28 Python
yolov5返回坐标的方法实例
2022/03/17 Python
Python+Pillow+Pytesseract实现验证码识别
2022/05/11 Python