Python利用多線程同步鎖實現(xiàn)多窗口訂票系統(tǒng)(推薦)
利用Python實現(xiàn)多窗口訂票系統(tǒng),利用
threading.Lock()
避免出現(xiàn)一票多賣,無票也賣的情況,并規(guī)范化輸出情況。
代碼:
import threading import time tickets, lock = 20, threading.Lock() class TicketWindows(threading.Thread): def __init__(self, window_name): threading.Thread.__init__(self) self.window_name = window_name def run(self): sell_tickets(self.window_name) def sell_tickets(threadName): global tickets while tickets > 0: lock.acquire() # 加一個同步鎖,類似Java中的synchronized if tickets > 0: print(threadName, "準(zhǔn)備出票,還剩余票:", tickets, "張") tickets -= 1 print(threadName, "賣出1張車票,還剩:", tickets, "張") print("----------------------------------") else: print("車票售空!") lock.release() # 釋放同步鎖 try: time.sleep(1) except RuntimeError: 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 準(zhǔn)備出票,還剩余票: 20 張
窗口1 賣出1張車票,還剩: 19 張
----------------------------------
窗口2 準(zhǔn)備出票,還剩余票: 19 張
窗口2 賣出1張車票,還剩: 18 張
----------------------------------
窗口3 準(zhǔn)備出票,還剩余票: 18 張
窗口3 賣出1張車票,還剩: 17 張
----------------------------------
窗口2 準(zhǔn)備出票,還剩余票: 17 張
窗口2 賣出1張車票,還剩: 16 張
----------------------------------
窗口3 準(zhǔn)備出票,還剩余票: 16 張
窗口3 賣出1張車票,還剩: 15 張
----------------------------------
窗口1 準(zhǔn)備出票,還剩余票: 15 張
窗口1 賣出1張車票,還剩: 14 張
----------------------------------
窗口3 準(zhǔn)備出票,還剩余票: 14 張
窗口3 賣出1張車票,還剩: 13 張
----------------------------------
窗口1 準(zhǔn)備出票,還剩余票: 13 張
窗口1 賣出1張車票,還剩: 12 張
----------------------------------
窗口2 準(zhǔn)備出票,還剩余票: 12 張
窗口2 賣出1張車票,還剩: 11 張
----------------------------------
窗口1 準(zhǔn)備出票,還剩余票: 11 張
窗口1 賣出1張車票,還剩: 10 張
----------------------------------
窗口3 準(zhǔn)備出票,還剩余票: 10 張
窗口3 賣出1張車票,還剩: 9 張
----------------------------------
窗口2 準(zhǔn)備出票,還剩余票: 9 張
窗口2 賣出1張車票,還剩: 8 張
----------------------------------
窗口1 準(zhǔn)備出票,還剩余票: 8 張
窗口1 賣出1張車票,還剩: 7 張
----------------------------------
窗口3 準(zhǔn)備出票,還剩余票: 7 張
窗口3 賣出1張車票,還剩: 6 張
----------------------------------
窗口2 準(zhǔn)備出票,還剩余票: 6 張
窗口2 賣出1張車票,還剩: 5 張
----------------------------------
窗口1 準(zhǔn)備出票,還剩余票: 5 張
窗口1 賣出1張車票,還剩: 4 張
----------------------------------
窗口2 準(zhǔn)備出票,還剩余票: 4 張
窗口2 賣出1張車票,還剩: 3 張
----------------------------------
窗口3 準(zhǔn)備出票,還剩余票: 3 張
窗口3 賣出1張車票,還剩: 2 張
----------------------------------
窗口1 準(zhǔn)備出票,還剩余票: 2 張
窗口1 賣出1張車票,還剩: 1 張
----------------------------------
窗口3 準(zhǔn)備出票,還剩余票: 1 張
窗口3 賣出1張車票,還剩: 0 張
----------------------------------
車票售空!
退出主線程
注意:使用 synchronized 修飾run()方法是無效的!這會導(dǎo)致自始至終只有一個窗口進行賣票操作!
總結(jié)
以上所述是小編給大家介紹的Python利用多線程同步鎖實現(xiàn)多窗口訂票系統(tǒng),希望對大家有所幫助!
相關(guān)文章
Numpy中np.vstack()?和?np.hstack()?的實現(xiàn)
本文主要介紹了Numpy中np.vstack()和np.hstack()的實現(xiàn),文中通過示例代碼介紹的非常詳細,對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2024-04-04python使用Celery構(gòu)建異步任務(wù)隊列提高服務(wù)器吞吐量及響應(yīng)速度
這篇文章主要介紹了python使用Celery構(gòu)建異步任務(wù)隊列提高服務(wù)器吞吐量及響應(yīng)速度實例探究,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪2024-01-01一文了解Python中NotImplementedError的作用
NotImplementedError是一個內(nèi)置異常類,本文主要介紹了一文了解Python中NotImplementedError的作用,具有一定的參考價值,感興趣的可以了解一下2024-03-03python 腳本生成隨機 字母 + 數(shù)字密碼功能
本文通過一小段簡單的代碼給大家分享基于python 腳本生成隨機 字母 + 數(shù)字密碼功能,感興趣的朋友跟隨腳本之家小編一起學(xué)習(xí)吧2018-05-05