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(发邮件时,请将#更换为@)进行举报,并提供相关证据,一经查实,本站将立刻删除涉嫌侵权内容。