網(wǎng)站頁(yè)面的滑動(dòng)怎么做現(xiàn)代營(yíng)銷(xiāo)手段有哪些
一、Queue模塊的知識(shí)點(diǎn)思維導(dǎo)圖
二、Queue模塊常用函數(shù)介紹
queue模塊是內(nèi)置的,不需要安裝直接導(dǎo)入就可以了。
(1)創(chuàng)建一個(gè)Queue對(duì)象
import queue# 創(chuàng)建一個(gè)隊(duì)列實(shí)例
q = queue.Queue(maxsize=20) # 可選參數(shù),默認(rèn)為無(wú)限大
(2)入隊(duì)
# 導(dǎo)入Python標(biāo)準(zhǔn)庫(kù)中的queue模塊,該模塊提供了線程安全的隊(duì)列數(shù)據(jù)結(jié)構(gòu)
import queue# 創(chuàng)建一個(gè)Queue對(duì)象,可以理解為初始化一個(gè)隊(duì)列,參數(shù)maxsize默認(rèn)為0,表示隊(duì)列大小無(wú)限制
q = queue.Queue()# 使用for循環(huán)將數(shù)字0到9依次放入隊(duì)列中
# put方法用于將元素放入隊(duì)列尾部,即執(zhí)行入隊(duì)操作
for i in range(10):q.put(i) # 這里每執(zhí)行一次,就將i(0-9)作為一個(gè)元素放入隊(duì)列中# 此時(shí),隊(duì)列q中按照先進(jìn)先出(FIFO)原則存儲(chǔ)了數(shù)字0-9
(3)出隊(duì)
# 導(dǎo)入Python內(nèi)置的queue模塊,其中包含線程安全的隊(duì)列數(shù)據(jù)結(jié)構(gòu)
import queue# 創(chuàng)建一個(gè)Queue對(duì)象,即初始化一個(gè)空隊(duì)列
q = queue.Queue()# 使用for循環(huán)將0到9這10個(gè)整數(shù)依次入隊(duì)
# put方法將元素添加到隊(duì)列的末尾
for i in range(10):q.put(i) # 每次循環(huán)都將i作為元素放入隊(duì)列中
(4)判空
# 導(dǎo)入Python內(nèi)置的queue模塊,其中包含線程安全的隊(duì)列數(shù)據(jù)結(jié)構(gòu)
import queue# 創(chuàng)建一個(gè)Queue對(duì)象,即初始化一個(gè)空隊(duì)列
q = queue.Queue()# 使用for循環(huán)將0到9這10個(gè)整數(shù)依次入隊(duì)
# put方法將元素添加到隊(duì)列的末尾
for i in range(10):q.put(i) # 每次循環(huán)都將i作為元素放入隊(duì)列中# 使用while循環(huán)檢查隊(duì)列是否為空
# 當(dāng)隊(duì)列不為空時(shí),持續(xù)執(zhí)行循環(huán)體內(nèi)的操作
while not q.empty(): # 使用get方法從隊(duì)列中取出并移除一個(gè)元素# 默認(rèn)情況下,get方法會(huì)阻塞直到有元素可用(除非設(shè)置了非阻塞模式)data = q.get() # 打印從隊(duì)列中取出的元素print(data)# 當(dāng)隊(duì)列為空時(shí),while循環(huán)結(jié)束
# 此時(shí)所有之前入隊(duì)的整數(shù)0-9會(huì)被按照先進(jìn)先出(FIFO)的原則依次出隊(duì)并打印
(5)判滿
import queue# 初始化一個(gè)容量為5的隊(duì)列
q = queue.Queue(maxsize=5)# 入隊(duì)操作
for i in range(10):# 在入隊(duì)前檢查隊(duì)列是否已滿if q.full():print("Queue is full, cannot insert more items.")else:q.put(i)# 若隊(duì)列已滿,可以選擇等待一段時(shí)間后重試或其他處理策略if q.full():time.sleep(1) # 假設(shè)休眠一秒后重試continuewhile not q.empty():data = q.get()print(data)
(6)獲取隊(duì)列長(zhǎng)度
import queue# 創(chuàng)建一個(gè)隊(duì)列
q = queue.Queue()# 將10個(gè)元素放入隊(duì)列
for i in range(10):q.put(i)# 打印隊(duì)列長(zhǎng)度
print(f"Queue size before processing: {q.qsize()}")# 處理隊(duì)列中的元素,同時(shí)打印隊(duì)列長(zhǎng)度
while not q.empty():data = q.get()print(f"Processing element: {data}, current queue size: {q.qsize()}")# 在處理過(guò)程中,每次從隊(duì)列中取出一個(gè)元素后,隊(duì)列長(zhǎng)度都會(huì)減一
(7)task_done() 和 unfinished_tasks
import queue
import threading# 創(chuàng)建一個(gè)隊(duì)列
q = queue.Queue()# 生產(chǎn)者線程將任務(wù)放入隊(duì)列
def producer():for i in range(10):q.put(i)print(f"Producer added task: {i}")# 消費(fèi)者線程從隊(duì)列中取出并處理任務(wù)
def consumer():while True:task = q.get() # 獲取任務(wù)print(f"Consumer started working on task: {task}")# 這里模擬任務(wù)處理過(guò)程# 實(shí)際應(yīng)用中,此處應(yīng)替換為實(shí)際的任務(wù)處理邏輯process_task(task)# 任務(wù)處理完畢,調(diào)用 task_done()q.task_done()print(f"Consumer finished task: {task}")# 檢查隊(duì)列是否為空且所有任務(wù)都已經(jīng)完成if q.empty() and q.unfinished_tasks == 0:print("All tasks completed, exiting consumer.")break# 創(chuàng)建并啟動(dòng)生產(chǎn)者線程
p = threading.Thread(target=producer)
p.start()
p.join() # 確保生產(chǎn)者線程完成任務(wù)# 創(chuàng)建并啟動(dòng)消費(fèi)者線程
c = threading.Thread(target=consumer)
c.start()
c.join() # 等待消費(fèi)者線程處理完所有任務(wù)并退出# 由于消費(fèi)者線程在所有任務(wù)完成后退出,所以在此處不需要再次檢查隊(duì)列狀態(tài)
(8)join
import queue
import threading# 創(chuàng)建一個(gè)隊(duì)列
q = queue.Queue()# 生產(chǎn)者線程將任務(wù)放入隊(duì)列
def producer():for i in range(10):q.put(i)print("Producer has added all tasks.")# 消費(fèi)者線程從隊(duì)列中取出并處理任務(wù)
def consumer():while True:task = q.get() # 獲取任務(wù)print(f"Consumer started working on task: {task}")# 這里模擬任務(wù)處理過(guò)程# 實(shí)際應(yīng)用中,此處應(yīng)替換為實(shí)際的任務(wù)處理邏輯process_task(task)# 任務(wù)處理完畢,調(diào)用 task_done()q.task_done()print(f"Consumer finished task: {task}")# 檢查隊(duì)列是否為空if q.empty():print("No more tasks in the queue.")break# 創(chuàng)建并啟動(dòng)生產(chǎn)者線程
p = threading.Thread(target=producer)
p.start()
p.join() # 確保生產(chǎn)者線程完成任務(wù)添加# 創(chuàng)建并啟動(dòng)消費(fèi)者線程
c = threading.Thread(target=consumer)
c.start()# 主線程等待所有任務(wù)完成
q.join() # 阻塞主線程,直到所有從隊(duì)列中取出的任務(wù)都被標(biāo)記為完成print("All tasks have been processed and marked as done.")