python queue模块常用方法

在Python中,queue模块是用于实现队列数据结构的标准库模块。它提供了多种队列实现,用于在多线程环境中安全地传递数据。

Queue:这是最常用的队列实现,也称为先进先出(FIFO)队列。它提供了线程安全的操作方法,包括放入元素到队列尾部和从队列头部获取元素。

LifoQueue:这是后进先出(LIFO)队列,也称为栈。与普通队列不同,LifoQueue在放入和获取元素时遵循后进先出的原则。

PriorityQueue:这是一个带有优先级的队列实现。元素插入时可以指定优先级,值越小表示优先级越高。当获取元素时,优先级高的元素会被优先返回。

常用方法

1. 插入和获取队列数据,先进先出队列FIFO

from queue import Queue

# 创建一个队列对象
q = Queue()

# 将元素放入队列中
q.put('item')

# 从队列中获取并移除一个元素(如果队列为空,会阻塞)
item = q.get()
print(item)

# 检查队列是否为空
if q.empty():
    print("队列为空")
else:
    print("队列不为空")

打印结果:

2. 获取队列中的元素数量

from queue import Queue

# 设置队列的最大长度(如果不指定最大长度,则默认为无限)
q = Queue(maxsize=10)   # 设置最大长度为10

# 将元素放入队列中
q.put('item1')
q.put('item2')
q.put('item3')

print(q.qsize())

打印结果:

3. 创建一个后进先出队列LIFO

from queue import LifoQueue

# 创建一个队列对象
q = LifoQueue()

# 将元素放入队列中
q.put('item1')
q.put('item2')
q.put('item3')


print(q.get())  # item3
print(q.get())  # item2
print(q.get())  # item1

打印结果:
item3后插入,先输出

4. 创建一个带有优先级的队列PriorityQueue

from queue import PriorityQueue

# 创建一个队列对象
q = PriorityQueue()

# 将元素放入队列中,设置元素的优先级(值越小,优先级越高)
q.put((5, 'item1'))
q.put((3, 'item2'))
q.put((4, 'item3'))


print(q.get())  # (3, 'item2')
print(q.get())  # (4, 'item3')
print(q.get())  # (5, 'item1')

打印结果:

5.获取队列中所有元素(不会影响原始队列)

from queue import PriorityQueue

# 创建一个队列对象
q = PriorityQueue()

# 将元素放入队列中
q.put((5, 'item1'))
q.put((3, 'item2'))
q.put((4, 'item3'))

items = list(q.queue)
print(items)

打印结果:

6. queue模块实现消费者-生产者模式

from queue import Queue
import threading
import time

q = Queue()

def consumer():
    while True:
        item = q.get()
        if item is None:
            break  # 遇到空元素表示任务结束,退出循环
        # 处理任务...
        print(f"消费数据:{item}")
        time.sleep(2)

def producer():
    for i in range(5):
        q.put(i)  # 生产一个元素放入队列
        print(f'生产数据:{i}')
        time.sleep(1)

# 创建生产者线程和消费者线程
t_p = threading.Thread(target=producer)
t_c = threading.Thread(target=consumer)

# 启动线程
t_p.start()
t_c.start()

# 等待生产者线程生产任务完成
t_p.join()

# 生产者线程运行完毕后,会在队列中添加一个空元素,表示生产任务全部完成
q.put(None)

# 等待消费者线程消费任务完成
t_p.join()

我们创建了一个queue.Queue对象作为生产者和消费者之间的共享队列。生产者函数producer()循环产生一些元素,并将这些元素放入队列中,然后睡眠1秒。消费者函数consumer()从队列中获取元素并打印出来,然后睡眠2秒。主线程创建生产者线程和消费者线程,并启动它们。生产者线程运行完毕后,会在队列中添加一个空元素,表示生产任务全部完成。然后等待消费者线程处理完剩余的元素,并最终结束。
打印结果:
python queue模块常用方法_第1张图片

你可能感兴趣的:(Python3,Linux运维,python)