溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

Python如何利用多線程同步鎖實現多窗口訂票系統

發布時間:2021-05-31 13:08:16 來源:億速云 閱讀:274 作者:小新 欄目:開發技術

這篇文章主要介紹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如何利用多線程同步鎖實現多窗口訂票系統”這篇文章的所有內容,感謝各位的閱讀!希望分享的內容對大家有幫助,更多相關知識,歡迎關注億速云行業資訊頻道!

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

亚洲午夜精品一区二区_中文无码日韩欧免_久久香蕉精品视频_欧美主播一区二区三区美女