python的queue模組提供一種適用於多執行緒程式設計的fifo實現。它可用於在生產者(producer)和消費者(consumer)之間執行緒安全(thread-safe)地傳遞訊息或其它資料,因此多個執行緒可以共用同乙個queue例項。queue的大小(元素的個數)可用來限制記憶體的使用。
python2和python3的匯入不一樣,python2是import queue,python3是import queue
常用方法:
queue.get是從佇列裡拿資料,queue.put是往佇列新增資料
import queue
# 設定上限maxsize=10
q = queue.queue(maxsize=10)
# 往佇列加10個資料
for i in range(100):
if q.qsize() >= 10:
# 存放的資料達到上限maxsize,插入會導致阻塞
break
else:
q.put(i)
# 從佇列取值
while not q.empty():
n = q.get()
print("本次取出資料:%s" % n)
執行結果:
本次取出資料:0
本次取出資料:1
本次取出資料:2
本次取出資料:3
本次取出資料:4
本次取出資料:5
本次取出資料:6
本次取出資料:7
本次取出資料:8
本次取出資料:9
# utf-8
import queue
import threading
import time
exitflag = 0
class mythread (threading.thread):
def __init__(self, threadid, name, q):
threading.thread.__init__(self)
self.threadid = threadid
self.name = name
self.q = q
def run(self):
print("starting " + self.name)
process_data(self.name, self.q)
print("exiting " + self.name)
def process_data(threadname, q):
while not exitflag:
queuelock.acquire()
if not workqueue.empty():
data = q.get()
queuelock.release()
print("%s processing %s" % (threadname, data))
else:
queuelock.release()
time.sleep(1)
users = ["user-1", "user-2", "user-3"]
usernames = ["name1", "name2", "name3", "name4", "name5", "name6", "name7", "name8", "name9", "name10"]
queuelock = threading.lock()
workqueue = queue.queue(10)
threads =
threadid = 1
# 建立新執行緒
for tname in users:
thread = mythread(threadid, tname, workqueue)
thread.start()
threadid += 1
# 填充佇列
queuelock.acquire()
for word in usernames:
workqueue.put(word)
queuelock.release()
# 等待佇列清空
while not workqueue.empty():
pass
# 通知執行緒是時候退出
exitflag = 1
# 等待所有執行緒完成
for t in threads:
t.join()
print("exiting main thread")
執行結果:
starting user-1
starting user-2
starting user-3
user-3 processing name1
user-2 processing name2
user-1 processing name3
user-3 processing name4
user-2 processing name5
user-1 processing name6
user-3 processing name7
user-2 processing name8
user-1 processing name9
user-3 processing name10
exiting user-2
exiting user-1
exiting user-3
exiting main thread
python自動化交流 qq群:779429633
29 餐桌上的7(佇列)
有一種酒桌遊戲叫做 敲7 規則是從乙個人開始,說出任意數字,其他人會順序往後報,如果乙個數字包含 7,或者是 7 的倍數,那麼需要敲打杯子或盤子,不能說出。現在 n 個人 圍坐在乙個圓桌周圍,他們編號從 1 到 n 順時針排列。從某一人開始報出乙個數字,其他人 會按照順時針方向順序往後報 加1 如果...
python3佇列使用
python3直接import queue 會報錯,要改成import queue from queue import queue maxsize 1 from queue import queue 執行緒佇列通訊使用 這個是普通的佇列模式,類似於普通列表,先進先出模式,get方法會阻塞請求,直到有...
03 佇列操作
時間限制 100ms 記憶體限制 100kb 描述假設以帶頭節點的迴圈鍊錶表示佇列,並且只設乙個指標指向隊尾元素節點 不設頭指標 節點元素這裡設為整型,編寫佇列的初始化 入隊和出隊演算法。其中入隊元素個數n及其節點資料,和出隊元素個數m都是從鍵盤輸入 預設n m都不小於0 然後輸出出隊元素,出隊不合...