這篇文章主要介紹Python如何利用多線程同步鎖實現多窗口訂票系統,文中介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們一定要看完!
利用Python實現多窗口訂票系統,利用
threading.Lock()
避免出現一票多賣,無票也賣的情況,并規范化輸出情況。
代碼:
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, "準備出票,還剩余票:", 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 準備出票,還剩余票: 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如何利用多線程同步鎖實現多窗口訂票系統”這篇文章的所有內容,感謝各位的閱讀!希望分享的內容對大家有幫助,更多相關知識,歡迎關注億速云行業資訊頻道!
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。