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基础教程