python基础之标准库基于queue一个同步的队列类模块介绍相关2

42 阅读2分钟

Python的标准库中的queue模块提供了几种不同类型的队列,用于多线程编程中实现线程间的同步。这个模块中最主要的类是QueueLifoQueue,和PriorityQueue

  1. Queue (先进先出队列): 这是最常用的队列类型,遵循先进先出的原则。它特别适用于任务队列,其中第一个加入队列的任务也是第一个被处理。

    基本用法:

    from queue import Queue
    
    q = Queue()
    q.put('item1')  # 将项目加入队列
    q.put('item2')
    
    q.get()         # 返回并移除队列的第一个项目,这里是 'item1'
    
  2. LifoQueue (后进先出队列): 这种队列类型是后进先出的,也就是说,最后加入队列的元素会是第一个被取出。这种类型的队列类似于栈的数据结构。

    示例代码:

    from queue import LifoQueue
    
    lifo = LifoQueue()
    lifo.put('item1')
    lifo.put('item2')
    
    lifo.get()      # 返回并移除队列的最后一个项目,这里是 'item2'
    
  3. PriorityQueue (优先队列): 优先队列元素的处理顺序不是基于它们被加入队列的顺序,而是基于它们的优先级。较低的值具有较高的优先级。

    使用例子:

    from queue import PriorityQueue
    
    pq = PriorityQueue()
    pq.put((2, 'item2'))   # 数字越小,优先级越高
    pq.put((1, 'item1'))
    pq.put((3, 'item3'))
    
    pq.get()               # 返回并移除优先级最高的项目,这里是 'item1'
    

这些队列类都提供了线程安全的实现,意味着它们可以安全地在多个线程之间共享和操作。此外,队列类还支持阻塞操作,如get()方法在队列为空时会阻塞,直到有项目被加入队列。这对于线程间的同步非常有用。同时,可以设置队列的最大长度,当队列满时,put()方法也会阻塞,直到队列中有空间为止。