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代理抓取并验证使用多线程实现
May 03 Python
跟老齐学Python之永远强大的函数
Sep 14 Python
在Linux下调试Python代码的各种方法
Apr 17 Python
python统计文本文件内单词数量的方法
May 30 Python
Python 编码Basic Auth使用方法简单实例
May 25 Python
开源软件包和环境管理系统Anaconda的安装使用
Sep 04 Python
Python闭包思想与用法浅析
Dec 27 Python
python安装virtualenv虚拟环境步骤图文详解
Sep 18 Python
python支持多线程的爬虫实例
Dec 21 Python
tensorflow之并行读入数据详解
Feb 05 Python
TensorFlow中如何确定张量的形状实例
Jun 23 Python
python在CMD界面读取excel所有数据的示例
Sep 28 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
Fatal error: Call to undefined function curl_init()解决方法
2010/04/09 PHP
php json_encode奇怪问题说明
2011/09/27 PHP
ThinkPHP框架实现session跨域问题的解决方法
2014/07/01 PHP
apache php mysql开发环境安装教程
2016/07/28 PHP
解决laravel 5.1报错:No supported encrypter found的办法
2017/06/07 PHP
IE DOM实现存在的部分问题及解决方法
2009/07/25 Javascript
基于jQuery下拉选择框插件支持单选多选功能代码
2016/06/07 Javascript
详细探究ES6之Proxy代理
2016/07/22 Javascript
window.open不被拦截的简单实现代码(推荐)
2016/08/04 Javascript
JS简单设置下拉选择框默认值的方法
2016/08/20 Javascript
微信小程序 购物车简单实例
2016/10/24 Javascript
React Native之TextInput组件解析示例
2017/08/22 Javascript
Nodejs实现文件上传的示例代码
2017/09/26 NodeJs
详解Vue-cli中的静态资源管理(src/assets和static/的区别)
2018/06/19 Javascript
Layui给数据表格动态添加一行并跳转到添加行所在页的方法
2018/08/20 Javascript
js实现同一个页面,多个enter事件绑定的示例
2018/10/10 Javascript
JS回调函数原理与用法详解【附PHP回调函数】
2019/07/20 Javascript
[58:37]Serenity vs Fnatic 2018国际邀请赛淘汰赛BO1 8.21
2018/08/22 DOTA
python实现apahce网站日志分析示例
2014/04/02 Python
Python3.x对JSON的一些操作示例
2017/09/01 Python
python Matplotlib底图中鼠标滑过显示隐藏内容的实例代码
2019/07/31 Python
使用Python测试Ping主机IP和某端口是否开放的实例
2019/12/17 Python
python3.6环境下安装freetype库和基本使用方法(推荐)
2020/05/10 Python
matplotlib实现数据实时刷新的示例代码
2021/01/05 Python
浅谈HTML5中dialog元素尝鲜
2018/10/15 HTML / CSS
班组长的岗位职责
2013/12/09 职场文书
迷你西餐厅创业计划书范文
2013/12/31 职场文书
教师开学感言
2014/02/14 职场文书
2015年社区环境卫生工作总结
2015/04/21 职场文书
员工手册编写范本
2015/05/14 职场文书
小学庆六一主持词
2015/06/30 职场文书
文艺委员竞选稿
2015/11/19 职场文书
2016反腐倡廉警示教育心得体会
2016/01/13 职场文书
幼儿园大班教学反思
2016/03/02 职场文书
SpringBoot项目中控制台日志的保存配置操作
2021/06/18 Java/Android
高并发下Redis如何保持数据一致性(避免读后写)
2022/03/18 Redis