python多執行緒(三)優先順序佇列( Queue)

2021-09-18 01:25:12 字數 1926 閱讀 7599

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 ...