当前位置: 首页 > 图灵资讯 > 行业资讯> python线程优先级队列有哪些?

python线程优先级队列有哪些?

来源:图灵python
时间: 2024-08-27 14:00:59

Python 的 Queue 同步、线程安全的队列类别在模块中提供,包括FIFO(先入先出)队列Queue,LIFO(后入先出)队列LifoQueue和优先级队列 PriorityQueue。

1、说明

所有这些队列都实现了锁原语,可以直接用于多线程,可以用于线程间的同步。

模块中常用的方法如下:

Queue.qsize() 返回队列的大小

Queue.empty() 如果队列是空的,返回True,相反,False

Queue.full() 如果队列满了,回到True,相反,False

Queue.full 与 maxsize 大小对应

Queue.get([block[, timeout]])获取队列,timeout等待时间

Queue.get_nowait() 相当Queue.get(False)

Queue.put(item) 写入队列,timeout等待时间

Queue.put_nowait(item) 相当Queue.put(item, False)

Queue.task_done() 完成一项工作后,Queue.task_done()函数向已完成任务的队列发送信号

Queue.join() 事实上,这意味着等到队列空了再执行其他操作

2、实例

#!/usr/bin/python3

importqueue
importthreading
importtime

exitFlag=0

classmyThread(threading.Thread):
def__init__(self,threadID,name,q):
threading.Thread.__init__(self)
self.threadID=threadID
self.name=name
self.q=q
defrun(self):
print("开启线程:"+self.name)
process_data(self.name,self.q)
print("退出线程:"+self.name)

defprocess_data(threadName,q):
whilenotexitFlag:
queueLock.acquire()
ifnotworkQueue.empty():
data=q.get()
queueLock.release()
print("%sprocessing%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

#创建新线程
fortNameinthreadList:
thread=myThread(threadID,tName,workQueue)
thread.start()
threads.append(thread)
threadID+=1

#填充队列
queueLock.acquire()
forwordinnameList:
workQueue.put(word)
queueLock.release()

#等待队列清空
whilenotworkQueue.empty():
pass

#是时候通知线程退出了
exitFlag=1

#等待所有线程完成
fortinthreads:
t.join()
print("退出主线程")

以上是python线程优先级队列的介绍,希望能够介绍每个人都有帮助。更多Python学习指导:python基础教程