Python利用多線程同步鎖實(shí)現(xiàn)多窗口訂票系統(tǒng)(推薦)
利用Python實(shí)現(xiàn)多窗口訂票系統(tǒng),利用
threading.Lock()
避免出現(xiàn)一票多賣,無(wú)票也賣的情況,并規(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() # 加一個(gè)同步鎖,類似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()方法是無(wú)效的!這會(huì)導(dǎo)致自始至終只有一個(gè)窗口進(jìn)行賣票操作!
總結(jié)
以上所述是小編給大家介紹的Python利用多線程同步鎖實(shí)現(xiàn)多窗口訂票系統(tǒng),希望對(duì)大家有所幫助!
相關(guān)文章
Python+騰訊云服務(wù)器實(shí)現(xiàn)每日自動(dòng)健康打卡
本文主要介紹了通過(guò)Python+騰訊云服務(wù)器實(shí)現(xiàn)每日自動(dòng)健康打卡,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2021-12-12
python中plt.imshow與cv2.imshow顯示顏色問(wèn)題
這篇文章主要介紹了plt.imshow與cv2.imshow顯示顏色問(wèn)題,本文給大家介紹的非常詳細(xì),同時(shí)給大家提到了cv2.imshow()和plt.imshow()的區(qū)別講解,需要的朋友可以參考下2020-07-07
Python K-means實(shí)現(xiàn)簡(jiǎn)單圖像聚類的示例代碼
本文主要介紹了Python K-means實(shí)現(xiàn)簡(jiǎn)單圖像聚類的示例代碼,文中通過(guò)示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2021-10-10
用map函數(shù)來(lái)完成Python并行任務(wù)的簡(jiǎn)單示例
這篇文章主要介紹了用map函數(shù)來(lái)完成Python并行任務(wù)的簡(jiǎn)單示例,多線程和多進(jìn)程編程的問(wèn)題一直都是Python中的熱點(diǎn)和難點(diǎn),需要的朋友可以參考下2015-04-04
python實(shí)現(xiàn)倒計(jì)時(shí)小工具
這篇文章主要為大家詳細(xì)介紹了python實(shí)現(xiàn)倒計(jì)時(shí)小工具,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2019-07-07
Python實(shí)現(xiàn)跨平臺(tái)表格數(shù)據(jù)分頁(yè)打印預(yù)覽處理詳解
這篇文章主要為大家詳細(xì)介紹了如何使用PySide6/PyQt6實(shí)現(xiàn)Python跨平臺(tái)表格數(shù)據(jù)分頁(yè)打印預(yù)覽處理,感興趣的小伙伴可以跟隨小編一起學(xué)習(xí)一下2025-03-03
python多進(jìn)程使用函數(shù)封裝實(shí)例
這篇文章主要介紹了python多進(jìn)程使用函數(shù)封裝實(shí)例,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧2020-05-05
python將天數(shù)轉(zhuǎn)換為日期字符串的方法實(shí)例
這篇文章主要給大家介紹了關(guān)于python將天數(shù)轉(zhuǎn)換為日期字符串的相關(guān)資料,以及將將字符串的時(shí)間轉(zhuǎn)換為時(shí)間戳的實(shí)例代碼,需要的朋友可以參考下2022-01-01
python?pandas數(shù)據(jù)處理之刪除特定行與列
Pandas是數(shù)據(jù)科學(xué)中的利器,你可能想到的數(shù)據(jù)處理騷操作,貌似用Pandas都能夠?qū)崿F(xiàn),下面這篇文章主要給大家介紹了關(guān)于python?pandas數(shù)據(jù)處理之刪除特定行與列的相關(guān)資料,文中通過(guò)實(shí)例代碼介紹的非常詳細(xì),需要的朋友可以參考下2022-08-08

