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实现从web抓取文档的方法
Sep 26 Python
python字符串string的内置方法实例详解
May 14 Python
在Python中增加和插入元素的示例
Nov 01 Python
Python实现打砖块小游戏代码实例
May 18 Python
Pandas时间序列:重采样及频率转换方式
Dec 26 Python
Linux下升级安装python3.8并配置pip及yum的教程
Jan 02 Python
在python image 中实现安装中文字体
May 16 Python
python读取excel进行遍历/xlrd模块操作
Jul 12 Python
python 多线程中join()的作用
Oct 29 Python
python的setattr函数实例用法
Dec 16 Python
python实现腾讯滑块验证码识别
Apr 27 Python
python利用while求100内的整数和方式
Nov 07 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控制器里javascript代码不能执行的解决方法
2014/11/22 PHP
php的扩展写法总结
2019/05/14 PHP
PHP7创建COOKIE和销毁COOKIE的实例方法
2020/02/03 PHP
JavaScript 继承详解(二)
2009/07/13 Javascript
两个JavaScript jsFiddle JSBin在线调试器
2010/03/14 Javascript
javascript 闭包
2011/09/15 Javascript
js 编码转换 gb2312 和 utf8 互转的2种方法
2013/08/07 Javascript
js获取日期:昨天今天和明天、后天
2014/06/11 Javascript
判断window.onload是否多次使用的方法
2014/09/21 Javascript
删除Javascript Object中间的key
2014/11/18 Javascript
JS动态显示表格上下frame的方法
2015/03/31 Javascript
浅析JavaScript声明变量
2015/12/21 Javascript
jQuery Form 表单提交插件之formSerialize,fieldSerialize,fieldValue,resetForm,clearForm,clearFields的应用
2016/01/23 Javascript
使用getBoundingClientRect方法实现简洁的sticky组件的方法
2016/03/22 Javascript
JS取模、取商及取整运算方法示例
2016/10/13 Javascript
Angular2入门--架构总览
2017/03/29 Javascript
微信小程序之swiper滑动面板用法示例
2018/12/04 Javascript
ES6入门教程之let、const的使用方法
2019/04/13 Javascript
[02:31]DOTA2帕克 英雄基础教程
2013/11/26 DOTA
[46:00]DOTA2上海特级锦标赛主赛事日 - 2 胜者组第一轮#4EG VS Fnatic第一局
2016/03/03 DOTA
[50:02]完美世界DOTA2联赛PWL S2 Magma vs FTD 第三场 11.29
2020/12/03 DOTA
实例解析Python设计模式编程之桥接模式的运用
2016/03/02 Python
python3读取MySQL-Front的MYSQL密码
2017/05/03 Python
python urllib爬取百度云连接的实例代码
2017/06/19 Python
Python3.5字符串常用操作实例详解
2019/05/01 Python
python中Ansible模块的Playbook的具体使用
2020/05/28 Python
python是怎么被发明的
2020/06/15 Python
利用Python实现Json序列化库的方法步骤
2020/09/09 Python
Python3.9新特性详解
2020/10/10 Python
股份转让协议书
2014/04/12 职场文书
党员四风自我剖析材料
2014/10/07 职场文书
教导处教学工作总结
2015/08/12 职场文书
2016年三严三实党课学习心得体会
2016/01/06 职场文书
2016年社会主义核心价值观心得体会
2016/01/21 职场文书
Element实现动态表格的示例代码
2021/08/02 Javascript
Go结合Gin导出Mysql数据到Excel表格
2022/08/05 Golang