Python 线程优先级

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

Python教程

Java教程

Web教程

数据库教程

图形图像教程

大数据教程

开发工具教程

计算机教程