python 的 queue 模組中提供了同步的、執行緒安全的佇列類,包括fifo(先入先出)佇列queue,lifo(**先出)佇列lifoqueue,和優先順序佇列 priorityqueue。
這些佇列都實現了鎖原語,能夠在多執行緒中直接使用,可以使用佇列來實現執行緒間的同步。
queue 模組中的常用方法:
例項:
#!/usr/bin/python3
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 ("開啟執行緒:" + self.name)
process_data(self.name, self.q)
print ("退出執行緒:" + 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)
threadlist = ["thread-1", "thread-2", "thread-3"]
namelist = ["one", "two", "three", "four", "five"]
queuelock = threading.lock()
workqueue = queue.queue(10)
threads =
threadid = 1
# 建立新執行緒
for tname in threadlist:
thread = mythread(threadid, tname, workqueue)
thread.start()
threadid += 1
# 填充佇列
queuelock.acquire()
for word in namelist:
workqueue.put(word)
queuelock.release()
# 等待佇列清空
while not workqueue.empty():
pass
# 通知執行緒是時候退出
exitflag = 1
# 等待所有執行緒完成
for t in threads:
t.join()
print ("退出主線程")
以上程式執行結果:
開啟執行緒:thread-1
開啟執行緒:thread-2
開啟執行緒:thread-3
thread-3 processing one
thread-1 processing two
thread-2 processing three
thread-3 processing four
thread-1 processing five
退出執行緒:thread-3
退出執行緒:thread-2
退出執行緒:thread-1
退出主線程
python優先順序佇列 python 優先順序佇列
簡介 優先順序佇列是基於堆的,關於堆的時候可以參考文章堆,優先順序佇列就是入隊時,會分配乙個優先順序,之後出隊時,根據優先順序出列。如,入隊時 4,a 6,r 3 d 則出隊順序 6,r 4,a 3 d 優先順序佇列的python實現 class priorityqueue object def i...
多執行緒 執行緒優先順序
目錄 1 執行緒優先順序具有繼承性 2 執行緒優先順序的作用 thread類原始碼中定義 最低優先順序為1 public final static int min priority 1 一般沒有繼承,沒有顯示指定優先順序時,預設優先順序為5 public final static int norm ...
python優先順序佇列
class priorityqueue data dict def init self pass 入隊 如果物件沒有優先等級,則新增到隊尾,如果對空,則預設等級為1 如果物件有優先等級,如果有同等級的則新增到對應等級末尾 def push self,obj,key none if key none ...