【python】】Python 的 queue 模块使用笔记

@[python](Python 的 queue 模块使用笔记)

Python 的 queue 模块提供了同步队列实现,用于在多线程编程中安全地交换数据。以下是 queue 模块的一些主要类型和用法。


一、queue 模块

queue 模块包含以下几种类型的队列:

  • queue.Queue:先进先出(FIFO)队列。
  • queue.LifoQueue:后进先出(LIFO)队列,类似于栈。
  • queue.PriorityQueue:优先级队列,按优先级顺序处理元素。

二、示例代码

2.1. queue.Queue

这是一个典型的 FIFO 队列示例:

import time
import threading
import queue

# 创建一个 FIFO 队列
qFifo = queue.Queue(maxsize=10)

def producer():
    for i in range(10):
        qFifo.put(i)
        print(f'Produced {i}')
        time.sleep(1)

def consumer():
    while True:
        item = qFifo.get()
        if item is None:
            break
        print(f'Consumed {item}')
        qFifo.task_done()

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

prod_thread.start()
cons_thread.start()

prod_thread.join()

# 停止消费者线程
qFifo.put(None)
cons_thread.join()

2.2. queue.LifoQueue

这是一个后进先出(LIFO)队列示例:

import queue
import threading
import time

# 后进先出(LIFO)队列
qLifo = queue.LifoQueue(maxsize=10)

def producer():
    for i in range(10):
        qLifo.put(i)
        print(f'Produced {i}')
        time.sleep(1)

def consumer():
    while True:
        item = qLifo.get()
        if item is None:
            break
        print(f'Consumed {item}')
        qLifo.task_done()

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

prod_thread.start()
cons_thread.start()

prod_thread.join()

# 停止消费者线程
qLifo.put(None)
cons_thread.join()

2.3. queue.PriorityQueue

这是一个优先级队列示例:

import queue
import threading
import time

# 优先级队列,按优先级顺序处理元素
qPrio = queue.PriorityQueue()

def producer():
    for i in range(10):
        qPrio.put((i, f'Item {i}'))
        print(f'Produced Item {i}')
        time.sleep(1)

def consumer():
    while True:
        item = qPrio.get()
        if item is None:
            break
        priority, value = item
        print(f'Consumed {value}')
        qPrio.task_done()

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

prod_thread.start()
cons_thread.start()

prod_thread.join()

# 停止消费者线程
qPrio.put(None)
cons_thread.join()

三、主要方法

  • put(item, block=True, timeout=None):将 item 放入队列。block 和 timeout 控制是否阻塞。
  • get(block=True, timeout=None):从队列中取出一个 item。block 和 timeout 控制是否阻塞。
  • task_done():标记一个任务已经完成。必须在 get() 后调用。
  • join():等待队列中所有任务完成。

这些队列类型和方法可以在多线程程序中有效地管理数据交换。

四、代码

queue 模块的一些主要类型和用法

  • 11
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

qq2108462953

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值