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
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()
threads.append(thread)
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 ("退出主线程")
以上就是python线程优先级队列的介绍,希望能对
大家有所帮助。
更多Python学习指路:
本文为原创文章,版权归知行编程网所有,欢迎分享本文,转载请保留出处!
你可能也喜欢
- ♥ python return和yield有什么区别10/31
- ♥ 什么是python位置参数10/07
- ♥ 如何在 python 中进行乘法运算12/12
- ♥ Python里的左右互搏武功 | 进程编程入门篇03/02
- ♥ 如何解决python导出excel乱码10/29
- ♥ 探索python运算符的关联性10/17
内容反馈