您好,登录后才能下订单哦!
小编给大家分享一下python多线程怎么实现,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下面让我们一起去了解一下吧!
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多线程怎么实现”这篇文章的所有内容,感谢各位的阅读!相信大家都有了一定的了解,希望分享的内容对大家有所帮助,如果还想学习更多知识,欢迎关注亿速云行业资讯频道!
免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。