隊列–模擬銀行服務完成程序代碼
import time, threading
class Queue:
def __init__(self):
self.items = []
def isEmpty(self):
return self.items == []
def enqueue(self, item):
self.items.insert(0,item)
def dequeue(self):
if self.items != []:
return self.items.pop()
else:
return False
def size(self):
return len(self.items)
def top(self):
if self.items != []:
return self.items[len(self.items)-1]
else:
return False
class Counter(threading.Thread):
def __init__(self):
threading.Thread.__init__(self)
self.waitQueue = Queue()
self.lock = threading.Lock()
def callIng(self):
while True:
time.sleep(5)
if not self.waitQueue.isEmpty():
self.lock.acquire()
print("請客戶{},到{}窗口辦理業務".format(self.waitQueue.top(), threading.current_thread().name))
self.waitQueue.dequeue()
self.lock.release()
class bankSystem:
def __init__(self):
self.serviceQueue = Queue()
self.nowNum = 0
self.maxSize = 100
def getNumber(self):
if self.nowNum < self.maxSize:
self.nowNum += 1
return self.nowNum
else:
print("現在業務繁忙,請稍後再來")
if __name__ == "__main__":
res = bankSystem()
windowcount = 3
serviceWindow = [None] * windowcount
threadList = [None] * windowcount
for i in range(windowcount):
serviceWindow[i] = Counter()
serviceWindow[i].waitQueue = res.serviceQueue
threadList[i] = threading.Thread(name=(i + 1), target=serviceWindow[i].callIng, args=())
threadList[i].start()
while True:
input("請點擊觸摸屏獲取號碼:")
callNumber = res.getNumber()
if res.serviceQueue != None:
print("當前您的的號碼爲" + str(callNumber) + ",您前面還有" + str(res.serviceQueue.size()) + "個人")
res.serviceQueue.enqueue(res.nowNum)
else:
print('您的號碼是:%d,您前面有 0 位' % (callNumber))