python队列queue模块详解

yizhihongxing

Python队列(queue)模块详解

Python中队列(queue)是处理多线程中共享资源问题的一个重要工具,它遵循FIFO(先进先出)的原则,即先进入的数据先输出,而后进入的数据后输出。队列支持队列大小,以防止过度使用特定的内存资源。

Python中的队列实现为Queue模块,其中包含了三种队列类型:

  • FIFO队列(先进先出)
  • LIFO队列(后进先出),也叫做堆栈
  • 优先级队列(具有优先级顺序)

队列(queue)基本方法

以下是Queue模块中最重要的类和方法:

Queue(maxsize=0)

Queue类实现了所有基本的队列功能。maxsize是一个整数,用于设置可以放置在队列中的项目数。如果插入到队列中的项目数达到了maxsize,则插入操作将被阻塞,直到队列中的某个项目被删除,使有空间可用。

import queue

q = queue.Queue(maxsize=3)

q.put(1)
q.put(2)
q.put(3)

print(q.full())  # True

q.put(4, block=False)  # 由于队列已满,插入操作出发了queue.Full异常

while not q.empty():
    print(q.get(), end=' ')  # 输出1 2 3

LifoQueue(maxsize=0)

LifoQueue类实现了堆栈的功能。Stack类是LifoQueue的别名。它的构造方法与Queue相同,但默认的maxsize为0(无大小限制)。

import queue

lq = queue.LifoQueue(maxsize=3)

lq.put(1)
lq.put(2)
lq.put(3)

print(lq.full())  # True

lq.put(4, block=False)  # 由于堆栈已满,插入操作出发了queue.Full异常

while not lq.empty():
    print(lq.get(), end=' ')  # 输出3 2 1

PriorityQueue(maxsize=0)

PriorityQueue类实现了一个优先级队列。默认情况下,优先级值小的元素优先级高。队列中的每个元素必须是一个元组,其中第一个元素是优先级值(必须是数字类型),第二个元素是数据。

import queue

pq = queue.PriorityQueue(maxsize=3)

pq.put((1, '一'))
pq.put((2, '二'))
pq.put((3, '三'))

print(pq.full())  # True

pq.put((4, '四'), block=False)  # 由于队列已满,插入操作出发了queue.Full异常

while not pq.empty():
    print(pq.get()[1], end=' ')  # 输出一 二 三

队列(queue)其他方法

队列(Queue)数据结构还提供了许多其他方法,常用的有:

方法 描述
qsize() 返回队列的大小。当没有数量限制时,返回的值为0。
empty() 如果队列为空,返回True,否则返回False。
full() 如果队列满了,返回True,否则返回False。
get([block[, timeout]]) 获取队列中的一项。如果队列为空,block为True(默认值)则等待,直到队列中有一个项目为止。
get_nowait() 相当于get(False)。
put(item[, block[, timeout]]) 将一项添加到队列的尾部。如果队列已满,block为True(默认值)则等待。
put_nowait(item) 相当于put(item, False)。
task_done() 表示先前提交给队列的异步任务已经完成。
join() 阻塞调用线程,直到队列中的所有项目都被处理完(task_done()的调用次数等于项目的数量),才会继续运行。

总结

队列是多线程和协程编程中的重要工具,它是线程安全的,被多个线程和协程共享。Python提供了Queue模块来实现队列。Queue模块包含三种队列:FIFO、LIFO和优先级队列。队列(Queue)数据结构提供了许多方法,允许使用者控制队列的大小、检查队列状态以及添加和删除队列项目。

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:python队列queue模块详解 - Python技术站

(0)
上一篇 2023年6月2日
下一篇 2023年6月2日

相关文章

  • Python如何访问字符串中的值

    当我们要在Python中访问字符串中的值时,可以使用下标(index)来获取字符串中特定位置的字符。使用下标时,需要将下标放置在字符串变量的名称后面,并将下标值放到一对方括号中。 示例如下: str1 = "Hello, World!" print(str1[0]) # 输出第一个字符"H" print(str1[7]…

    python 2023年6月5日
    00
  • python opencv实现简易画图板

    让我来详细讲解关于“Python OpenCV实现简易画图板”的完整攻略。 1. 环境配置 在开始编写Python OpenCV画图板之前,需要安装相关的环境。具体的步骤如下: 安装OpenCV的Python库:使用命令pip install opencv-python进行安装。 安装numpy库:使用命令pip install numpy进行安装。 2. …

    python 2023年5月19日
    00
  • python3实现语音转文字(语音识别)和文字转语音(语音合成)

    Python3实现语音识别和语音合成 本文将分享如何使用Python3实现语音识别和语音合成的过程,主要使用的是Google Speech API和Google Text-to-Speech API。 安装依赖 在开始之前需要安装以下库: pip install google-cloud-speech google-cloud-texttospeech py…

    python 2023年5月19日
    00
  • Python中用xlwt制作表格实例讲解

    以下是Python中用xlwt制作表格实例讲解的完整实例教程: 目录 xlwt模块简介 创建Excel文件 创建工作表 添加数据到工作表 保存Excel文件 完整实例演示 示例说明 1. xlwt模块简介 xlwt是Python中的第三方库,用于创建和操作.xls格式(Excel 97-2003)文件。 2. 创建Excel文件 首先需要导入xlwt模块,并…

    python 2023年5月13日
    00
  • 分享python数据统计的一些小技巧

    当涉及数据统计和处理时,Python是广泛使用的编程语言之一。这里介绍一些Python中一些小技巧,可以帮助你更有效地进行数据统计和分析。 1. 使用Pandas进行数据清洗和处理 Pandas是Python中用于数据处理和分析的流行库。您可以使用它来执行各种数据操作,如排序、筛选、合并和清洗。下面是一个简单的示例,演示如何使用Pandas对数据进行清洗: …

    python 2023年6月3日
    00
  • Python利用装饰器click处理解析命令行参数

    下面我将详细介绍如何使用 Python 装饰器 click 来处理和解析命令行参数。 什么是 Click? Click 是一个 Python 命令行界面框架,它帮助开发者轻松地构建命令行应用程序。Click 通过装饰器来支持声明解析命令行参数,并且用于在 Python 函数中注册命令。 安装 Click 可以在终端中使用以下命令来安装 click: $ pi…

    python 2023年6月3日
    00
  • python excel多行合并的方法

    下面我将详细讲解“pythonexcel多行合并的方法”的完整实例教程。 标题 问题 如何用Python的pandas库将Excel表格中的多行合并成一行? 解决方法 使用pandas库,可以轻松实现多行合并功能,具体操作步骤如下: 1.导入pandas模块 import pandas as pd 2.读取Excel文件 df = pd.read_excel…

    python 2023年5月13日
    00
  • python 函数中的参数类型

    Python 函数中的参数类型 在 Python 函数中,可以接受多种类型的参数,包括必需参数、默认参数、关键字参数和可变参数。每种不同类型的参数都有自己的特点和使用方法。 必需参数 必需参数是函数定义中的普通参数,也称作“位置参数”,必须按照顺序传递,且在调用函数时必须传递指定数量的参数。 以下是一个求和函数的例子,需要输入两个参数: def add(x,…

    python 2023年6月5日
    00
合作推广
合作推广
分享本页
返回顶部