中文字幕av专区_日韩电影在线播放_精品国产精品久久一区免费式_av在线免费观看网站

溫馨提示×

溫馨提示×

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

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

怎么用Python多線程實現模擬火車站售票

發布時間:2021-08-31 23:05:45 來源:億速云 閱讀:161 作者:chen 欄目:開發技術

這篇文章主要介紹“怎么用Python多線程實現模擬火車站售票”,在日常操作中,相信很多人在怎么用Python多線程實現模擬火車站售票問題上存在疑惑,小編查閱了各式資料,整理出簡單好用的操作方法,希望對大家解答”怎么用Python多線程實現模擬火車站售票”的疑惑有所幫助!接下來,請跟著小編一起來學習吧!

本文實例為大家分享了Python多線程模擬火車站售票的具體代碼,供大家參考,具體內容如下

Python的標準庫提供了兩個模塊:thread和threading,thread是低級模塊,threading是高級模塊,對thread進行了封裝。

我們使用threading這個高級模塊, 模擬火車站賣票,如果不加鎖,賣出同一張票:

import threading 
from time import sleep, ctime
 
 
N = 100  # 100張票
 
def Sell(name):
     global N
 
     while True:
         if N>0:
            sleep(0.1)  #加入此句,可以讓線程賣出第0張票或同一張票
            print("{}賣出第{}張票!\n".format(name,N))
            N=N-1
 
def main():
 
    threads = {}
 
    for i in ( "A" ,"B"  ):
        # 實例化每個 Thread 對象,把函數和參數傳遞進去,返回 Thread 實例
        t = threading.Thread(target=Sell, args=( i  ,))
        threads[i]=t     # 分配線程
 
    for i in  ("A" ,"B"):
        threads[i].start()    # 開始執行多線程
 
    for i in  ("A" ,"B"):
        threads[i].join()     # 等待線程結束或超時,然后再往下執行
 
    print("程序結束!")
 
 
if __name__ == '__main__':
    main()

運行效果:

怎么用Python多線程實現模擬火車站售票

我們使用鎖來避免賣出同一張票,當多個線程同時執行lock.acquire()時,只有一個線程能成功地獲取鎖,然后繼續執行代碼,其他線程就等待直到獲得鎖為止。用try...finally來確保鎖一定會被釋放。

import threading
from time import sleep, ctime
 
N = 100  # 100張票
 
lock = threading.Lock()
 
def Sell(name):
 
     global N
 
     while True:
 
         lock.acquire()
         try:
            if N>0:
             sleep(0.1)  #加入此句,可以讓線程賣出第0張票或同一張票
             print("{}賣出第{}張票!\n".format(name,N))
             N=N-1
         finally:
             # 改完了一定要釋放鎖:
             lock.release()
 
def main():
 
    threads = {}
 
    for i in ( "A" ,"B"  ):
        # 實例化每個 Thread 對象,把函數和參數傳遞進去,返回 Thread 實例
        t = threading.Thread(target=Sell, args=( i  ,))
        threads[i]=t     # 分配線程
 
    for i in  ("A" ,"B"):
        threads[i].start()    # 開始執行多線程
 
    for i in  ("A" ,"B"):
        threads[i].join()     # 等待線程結束或超時,然后再往下執行
 
    print("程序結束!")
 
 
if __name__ == '__main__':
    main()

運行效果:

怎么用Python多線程實現模擬火車站售票

到此,關于“怎么用Python多線程實現模擬火車站售票”的學習就結束了,希望能夠解決大家的疑惑。理論與實踐的搭配能更好的幫助大家學習,快去試試吧!若想繼續學習更多相關知識,請繼續關注億速云網站,小編會繼續努力為大家帶來更多實用的文章!

向AI問一下細節

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

AI

梅河口市| 高密市| 沿河| 鹤壁市| 开封市| 仙游县| 张家口市| 敦化市| 大宁县| 元谋县| 睢宁县| 彩票| 高唐县| 天气| 北安市| 高州市| 南开区| 新沂市| 莲花县| 奉节县| 甘谷县| 山阴县| 任丘市| 凌海市| 太和县| 仙桃市| 惠来县| 洛宁县| 靖安县| 桦南县| 达尔| 高雄市| 宜宾县| 祁阳县| 宣汉县| 婺源县| 河北区| 麻城市| 天祝| 琼结县| 平原县|