python 多執行緒筆記(4) 車站售票模擬

2021-09-22 17:09:22 字數 1657 閱讀 7171

import

threading

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...