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中列表和元祖的使用方法
Apr 25 Python
django项目搭建与Session使用详解
Oct 10 Python
python中for循环输出列表索引与对应的值方法
Nov 07 Python
Python图像的增强处理操作示例【基于ImageEnhance类】
Jan 03 Python
Django中celery执行任务结果的保存方法
Jul 12 Python
django项目环境搭建及在虚拟机本地创建django项目的教程
Aug 02 Python
python连接PostgreSQL数据库的过程详解
Sep 18 Python
Window系统下Python如何安装OpenCV库
Mar 05 Python
浅谈Python线程的同步互斥与死锁
Mar 22 Python
Opencv python 图片生成视频的方法示例
Nov 18 Python
python爬虫beautifulsoup解析html方法
Dec 07 Python
Pycharm连接远程服务器并远程调试的全过程
Jun 24 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
thinkphp模板继承实例简述
2014/11/26 PHP
php基于curl实现随机ip地址抓取内容的方法
2016/10/11 PHP
PHP耦合设计模式实例分析
2018/08/08 PHP
php中如何执行linux命令详解
2018/11/06 PHP
Laravel框架定时任务2种实现方式示例
2018/12/08 PHP
ext监听事件方法[初级篇]
2008/04/27 Javascript
JavaScript设置FieldSet展开与收缩
2009/05/15 Javascript
jQuery在vs2008及js文件中的无智能提示的解决方法
2010/12/30 Javascript
jQuery1.3.2 升级到jQuery1.4.4需要修改的地方
2011/01/06 Javascript
基于jquery css3实现点击动画弹出表单源码特效
2015/08/31 Javascript
js实现的Easy Tabs选项卡用法实例
2015/09/06 Javascript
第一次接触神奇的Bootstrap
2016/10/14 Javascript
BootStrap实现轮播图效果(收藏)
2016/12/30 Javascript
第一次记录Bootstrap table学习笔记(1)
2017/05/18 Javascript
基于vue-ssr服务端渲染入门详解
2018/01/08 Javascript
全站最详细的Vuex教程
2018/04/13 Javascript
详解angular部署到iis出现404解决方案
2018/08/14 Javascript
微信小程序下拉刷新PullDownRefresh的使用方法
2018/11/29 Javascript
Vue路由模块化配置的完整步骤
2019/08/14 Javascript
python类继承与子类实例初始化用法分析
2015/04/17 Python
在Python程序和Flask框架中使用SQLAlchemy的教程
2016/06/06 Python
Python 爬虫学习笔记之正则表达式
2016/09/21 Python
django实现同一个ip十分钟内只能注册一次的实例
2017/11/03 Python
Python简单过滤字母和数字的方法小结
2019/01/09 Python
Python实现FTP文件传输的实例
2019/07/07 Python
PowerBI和Python关于数据分析的对比
2019/07/11 Python
djano一对一、多对多、分页实例代码
2019/08/16 Python
python生成任意频率正弦波方式
2020/02/25 Python
pycharm 复制代码出现空格的解决方式
2021/01/15 Python
澳大利亚小众服装品牌:Maurie & Eve
2018/03/27 全球购物
什么是View State?
2013/01/27 面试题
幽默导游词开场白
2015/05/29 职场文书
2016年春季趣味运动会开幕词
2016/03/04 职场文书
关于Vue Router的10条高级技巧总结
2021/05/06 Vue.js
一篇文章学会Vue中间件管道
2021/06/20 Vue.js
浅析Python中的套接字编程
2021/06/22 Python