python 多執行緒使用queue式例
阿新 • • 發佈:2018-11-19
參考自:https://blog.csdn.net/u011655220/article/details/79037032 from threading import Thread import time import random from queue import Queue from collections import deque import socket #建立佇列,設定佇列最大數限制為3個 queue = Queue() # #生產者執行緒 class Pro_Thread(Thread): def run(self): while True: time.sleep(10) #原材料準備,等待被生產 tasks = deque([1,2,4,3,4]) global queue while True: try: #從原材料左邊開始生產 task = tasks.popleft() queue.put(task) print("生產", task, "現在佇列數:", queue.qsize()) #休眠隨機時間 time.sleep(random.random()) #如果原材料被生產完,生產執行緒跳出迴圈 except IndexError: print("原材料已被生產完畢") break #消費者執行緒 class Con_Thread(Thread): def __init__(self, i): super().__init__() self.id = i def run(self): global queue while True: try: #通過get(),這裡已經將佇列減去了1 task = queue.get() time.sleep(1) #這裡可能佇列數已經空了,但是消費者手裡還有正在消費的佇列 #發出完成的訊號,不發的話,join會永遠阻塞,程式不會停止 except queue.Empty: pass def main(): for i in range(5): Con_i = Con_Thread(i) # 把兩個消費者執行緒列為守護執行緒,否則主執行緒結束之後不會銷燬該執行緒,程式不會停止,影響實驗結果 #啟動執行緒 Con_i.start() # 模擬tcp阻塞式樣接收資料 td = Pro_Thread() td.start() td.join() print("主執行緒結束") if __name__ == '__main__': main()