在Python中,queue
模塊提供了實(shí)現(xiàn)FIFO(先進(jìn)先出)隊(duì)列的類Queue
和deque
,以及實(shí)現(xiàn)優(yōu)先級(jí)隊(duì)列的類PriorityQueue
。下面是queue
模塊中常用的幾種函數(shù)的使用方法:
import queue
q = queue.Queue() # 創(chuàng)建一個(gè)FIFO隊(duì)列
q = queue.LifoQueue() # 創(chuàng)建一個(gè)LIFO隊(duì)列
q = queue.PriorityQueue() # 創(chuàng)建一個(gè)優(yōu)先級(jí)隊(duì)列
q.put(item) # 將元素item放入隊(duì)列中
item = q.get() # 從隊(duì)列中獲取元素,并將其從隊(duì)列中移除
empty = q.empty() # 返回True,如果隊(duì)列為空;否則返回False
size = q.qsize() # 返回隊(duì)列中元素的數(shù)量
import queue
import threading
def worker(q):
while not q.empty(): # 如果隊(duì)列不為空
item = q.get() # 從隊(duì)列中獲取元素
# 進(jìn)行相應(yīng)的處理操作
print(item)
q = queue.Queue()
# 向隊(duì)列中添加元素
for i in range(10):
q.put(i)
# 創(chuàng)建多個(gè)線程,每個(gè)線程從隊(duì)列中獲取元素并進(jìn)行處理
threads = []
for _ in range(5):
t = threading.Thread(target=worker, args=(q,))
t.start()
threads.append(t)
# 等待所有線程執(zhí)行完畢
for t in threads:
t.join()
上述代碼創(chuàng)建了一個(gè)隊(duì)列,并向隊(duì)列中添加了10個(gè)元素。然后創(chuàng)建了5個(gè)線程,每個(gè)線程從隊(duì)列中獲取元素并進(jìn)行處理。最后,等待所有線程執(zhí)行完畢。注意在多線程環(huán)境中使用隊(duì)列需要考慮線程安全性,可以使用queue.Queue
類本身提供的線程安全機(jī)制來(lái)保證安全訪問(wèn)。