importthreading
import
time
import
random
class
worker(threading.thread):
'''售票員
'''def
__init__(self, wait_num=5, index=0):
super().
__init__
() self.wait_num = wait_num #
當前排隊人數
self.setname('
視窗' + str(index)) #
視窗號def
run(self):
global
counter, mutex
while counter and self.wait_num: #
若有餘票且有人排隊
#*************************===
#視窗問詢
#*************************===
time.sleep(random.randrange(2,10)) #
比較耗時,時間隨機
#*************************===#出票
#*************************===
mutex.acquire() #
鎖住①if counter == 0: #
如果票數為0
mutex.release() #
解鎖③ -----> 這句很重要!!!
print(self.getname(), '
:抱歉,票已售完')
break
counter = counter - 1 #
票數減一
print('
{}:當前餘票 {} 張
'.format(self.getname(), counter))
mutex.release()
#解鎖③
#*************************===
#排隊人數變化
#*************************===
self.wait_num -= 1 #
排隊人數減一
self.wait_num += random.randrange(0,2) #
排隊人數隨機增加
if__name__ == '
__main__':
#剩餘車票數
counter = 20
#建立鎖 mutex =threading.lock()
#開4個售票視窗
workers =
for i in range(4):
wait_num = random.randrange(2,10) #
視窗前排隊人數隨機
#開始售票
for w in
workers:
w.start()
#阻塞主程/後台靜默?自己選
#for w in workers:
#w.join()
Python多執行緒(模擬火車站售票)
python的標準庫提供了兩個模組 thread和threading,thread是低階模組,threading是高階模組,對thread進行了封裝。我們使用threading這個高階模組,模擬火車站賣票,如果不加鎖,賣出同一張票 import threading from time import ...
Python多執行緒實現模擬火車站售票
python的標準庫提供了兩個模組 thread和threading,thread是低階模組,threading是高階模組,對thread進行了封裝。我們使用threading這個高階模組,模擬火車站賣票,如果不加鎖,賣出同一張票 import threading from time import ...
Python 多執行緒4 死鎖
encoding utf 8 import threading import time class mythread threading.thread def do1 self global resa,resb if mutexa.acquire msg self.name got resa pri...