Python利用多线程同步锁实现多窗口订票系统(推荐)
利用Python实现多窗口订票系统,利用
threading.Lock()
避免出现一票多卖,无票也卖的情况,并规范化输出情况。
代码:
importthreading importtime tickets,lock=20,threading.Lock() classTicketWindows(threading.Thread): def__init__(self,window_name): threading.Thread.__init__(self) self.window_name=window_name defrun(self): sell_tickets(self.window_name) defsell_tickets(threadName): globaltickets whiletickets>0: lock.acquire()#加一个同步锁,类似Java中的synchronized iftickets>0: print(threadName,"准备出票,还剩余票:",tickets,"张") tickets-=1 print(threadName,"卖出1张车票,还剩:",tickets,"张") print("----------------------------------") else: print("车票售空!") lock.release()#释放同步锁 try: time.sleep(1) exceptRuntimeError: print("error!") if__name__=='__main__': window1=TicketWindows("窗口1") window2=TicketWindows("窗口2") window3=TicketWindows("窗口3") window1.start() window2.start() window3.start() window1.join() window2.join() window3.join() print("退出主线程")
输出:
窗口1准备出票,还剩余票:20张
窗口1卖出1张车票,还剩:19张
----------------------------------
窗口2准备出票,还剩余票:19张
窗口2卖出1张车票,还剩:18张
----------------------------------
窗口3准备出票,还剩余票:18张
窗口3卖出1张车票,还剩:17张
----------------------------------
窗口2准备出票,还剩余票:17张
窗口2卖出1张车票,还剩:16张
----------------------------------
窗口3准备出票,还剩余票:16张
窗口3卖出1张车票,还剩:15张
----------------------------------
窗口1准备出票,还剩余票:15张
窗口1卖出1张车票,还剩:14张
----------------------------------
窗口3准备出票,还剩余票:14张
窗口3卖出1张车票,还剩:13张
----------------------------------
窗口1准备出票,还剩余票:13张
窗口1卖出1张车票,还剩:12张
----------------------------------
窗口2准备出票,还剩余票:12张
窗口2卖出1张车票,还剩:11张
----------------------------------
窗口1准备出票,还剩余票:11张
窗口1卖出1张车票,还剩:10张
----------------------------------
窗口3准备出票,还剩余票:10张
窗口3卖出1张车票,还剩:9张
----------------------------------
窗口2准备出票,还剩余票:9张
窗口2卖出1张车票,还剩:8张
----------------------------------
窗口1准备出票,还剩余票:8张
窗口1卖出1张车票,还剩:7张
----------------------------------
窗口3准备出票,还剩余票:7张
窗口3卖出1张车票,还剩:6张
----------------------------------
窗口2准备出票,还剩余票:6张
窗口2卖出1张车票,还剩:5张
----------------------------------
窗口1准备出票,还剩余票:5张
窗口1卖出1张车票,还剩:4张
----------------------------------
窗口2准备出票,还剩余票:4张
窗口2卖出1张车票,还剩:3张
----------------------------------
窗口3准备出票,还剩余票:3张
窗口3卖出1张车票,还剩:2张
----------------------------------
窗口1准备出票,还剩余票:2张
窗口1卖出1张车票,还剩:1张
----------------------------------
窗口3准备出票,还剩余票:1张
窗口3卖出1张车票,还剩:0张
----------------------------------
车票售空!
退出主线程
注意:使用 synchronized修饰run()方法是无效的!这会导致自始至终只有一个窗口进行卖票操作!
总结
以上所述是小编给大家介绍的Python利用多线程同步锁实现多窗口订票系统,希望对大家有所帮助!
声明:本文内容来源于网络,版权归原作者所有,内容由互联网用户自发贡献自行上传,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任。如果您发现有涉嫌版权的内容,欢迎发送邮件至:czq8825#qq.com(发邮件时,请将#更换为@)进行举报,并提供相关证据,一经查实,本站将立刻删除涉嫌侵权内容。