Python 线程优先级
Python标准库中的 queue 模块在多线程编程中非常有用,可以在多个线程之间安全地交换信息。该模块中的优先队列类实现了所有必需的锁定语义。
使用优先队列,条目会被保持排序(使用 heapq 模块),并且最低值的条目将被首先检索。
队列对象有以下方法来控制队列 –
- get() - get() 从队列中移除并返回一个条目。
- put() - put() 将一个条目添加到队列中。
- qsize() - qsize() 返回队列中当前的条目数。
- empty() - empty() 如果队列为空,则返回True;否则返回False。
- full() - full() 如果队列已满,则返回True;否则返回False。
queue.PriorityQueue(maxsize=0)
这是一个优先队列的构造函数。maxsize是一个整数,用于设置队列中可以放置的项目数量的上限。如果maxsize小于等于零,则队列大小是无限的。
最小值的条目首先被取出(最小值的条目是通过min(entries)返回的条目)。条目通常以元组的形式出现,如下所示:
(priority_number, data)
示例
from time import sleep
from random import random, randint
from threading import Thread
from queue import PriorityQueue
queue = PriorityQueue()
def producer(queue):
print('Producer: Running')
for i in range(5):
# create item with priority
value = random()
priority = randint(0, 5)
item = (priority, value)
queue.put(item)
# wait for all items to be processed
queue.join()
queue.put(None)
print('Producer: Done')
def consumer(queue):
print('Consumer: Running')
while True:
# get a unit of work
item = queue.get()
if item is None:
break
sleep(item[1])
print(item)
queue.task_done()
print('Consumer: Done')
producer = Thread(target=producer, args=(queue,))
producer.start()
consumer = Thread(target=consumer, args=(queue,))
consumer.start()
producer.join()
consumer.join()
它将产生以下 输出 −
Producer: Running
Consumer: Running
(0, 0.15332707626852804)
(2, 0.4730737391435892)
(2, 0.8679231358257962)
(3, 0.051924220435665025)
(4, 0.23945882716108446)
Producer: Done
Consumer: Done