queue
)和進程差很少(參照進程)7一. 線程隊列 引入線程隊列 : import queue #和普通隊列引入方法相同 線程隊列方法 : q = queue.Queue() #實例化對列,先進先出 q = queue.LifoQueue() #實例化隊列,後進先出 ( Last in, first out ) q = queue.PriorityQueue() #實例化隊列,優先級隊列 優先級隊列,put() 方法接收的是一個元組,第一個元素是優先級,第二個元素是數據 優先級若是爲數字,按照數字大小比較 若是優先級是字符串或特殊字符,按照字符串或特殊字符的ASCII碼比較,若是ASCII碼相同,按照先進先出原則取出
import queue q=queue.Queue() q.put('first') q.put('second') q.put('third') print(q.get()) print(q.get()) print(q.get()) ''' 結果(先進先出): first second third '''
import queue q=queue.LifoQueue() q.put('first') q.put('second') q.put('third') print(q.get()) print(q.get()) print(q.get()) ''' 結果(後進先出): third second first '''
from threading import Thread,Event import queue,time def put_a(name,food,q): for i in range(10): ret="%s生產%s-->%s個"%(name,food,i) q.put(ret) print(ret) q.put(None) def get_a(q,name): while True: ret=q.get() if ret is None:break time.sleep(1) print("%s---->吃%s"%(name,ret)) q=queue.Queue() p1=Thread(target=put_a,args=("張三","包子",q)) p2=Thread(target=get_a,args=(q,"李四")) p1.start() p1.join() p2.start()
queue.
PriorityQueue
(maxsize=0))import queue q=queue.PriorityQueue() #put進入一個元組,元組的第一個元素是優先級(一般是數字,也能夠是非數字之間的比較),數字越小優先級越高 q.put((20,'a')) q.put((10,'b')) q.put((30,'c')) print(q.get()) print(q.get()) print(q.get()) ''' 結果(數字越小優先級越高,優先級高的優先出隊): (10, 'b') (20, 'a') (30, 'c') '''