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
极客教程