广告
返回顶部
首页 > 资讯 > 后端开发 > Python >python中的queue队列类型及函数用法
  • 467
分享到

python中的queue队列类型及函数用法

2024-04-02 19:04:59 467人浏览 安东尼

Python 官方文档:入门教程 => 点击学习

摘要

目录python queue队列类型及函数1.队列的种类2.队列函数Python 队列类及其方法1.Python的队列类型2.队列对象(适用Queue、LifoQueue和Prior

python queue队列类型及函数

1.队列的种类

Python queue模块的FIFO队列先进先出。 class queue.Queue(maxsize)

LIFO类似于堆,即先进后出。 class queue.LifoQueue(maxsize)

还有一种是优先级队列级别越低越先出来。 class queue.PriorityQueue(maxsize)

import queue

# 先进先出队列
queue_obj = queue.Queue()

for i in range(3):
    queue_obj.put(i)

for i in range(3):
    print(queue_obj.get())

"""执行结果
0
1
2
"""

# 先进后出队列,类似于堆栈
queue_obj = queue.LifoQueue()

for i in range(3):
    queue_obj.put(i)

for i in range(3):
    print(queue_obj.get())

"""执行结果
2
1
0
"""

# 优先级队列
import Queue
import threading

class Job(object):
    def __init__(self, priority, description):
        self.priority = priority
        self.description = description
        print 'Job:',description
        return
    def __cmp__(self, other):
        return cmp(self.priority, other.priority)

q = Queue.PriorityQueue()

q.put(Job(3, 'level 3 job'))
q.put(Job(10, 'level 10 job'))
q.put(Job(1, 'level 1 job'))

def process_job(q):
    while True:
        next_job = q.get()
        print 'for:', next_job.description
        q.task_done()

workers = [threading.Thread(target=process_job, args=(q,)),
        threading.Thread(target=process_job, args=(q,))
        ]

for w in workers:
    w.setDaemon(True)
    w.start()

q.join()

2.队列函数

maxsize = 10
queue_obj = queue.Queue(maxsize)  # maxsize 代表队列的上限, 如果队列已满, 则插入时需要等待, maxsize为零或负数时.队列没有限制

queue_obj.get(block=True, timeout=None)  # block为True时,表示等待获取,直至timeout超时
queue_obj.get_nowait()  # 当获取不到元素时,报错

queue_obj.put(item="待插入的元素", block=True, timeout=None)  # block为True时,表示等待插入,直至timeout超时
queue_obj.put_nowait('待插入的元素')  # 当不能插入元素时报错

queue_obj.empty()  # 队列为空时,返回True

queue_obj.full()  # 如果队列满时,返回True

queue_obj.task_done()  # 在每次获取队列中的元素, 操作完成之后, 调用该函数告诉队列我已经使用完成, 主要是给join函数使用
queue_obj.join()  # 等待队列内的元素全部被获取后, 再接触阻塞(直至所有的任务全部task_done)

"""下面的例子验证toask_done和join的关系"""
for i in range(3):
    queue_obj.put(i)  # 这里像队列中添加三个元素

queue_obj.get()  # 这里获取队列中的消息
queue_obj.task_done()

queue_obj.get()  # 这里获取队列中的消息
queue_obj.task_done()

queue_obj.get()  # 这里获取队列中的消息
queue_obj.task_done()

queue_obj.join()
print('直至队列中的所有元素全部都被取出, join函数才不会阻塞, 如果只执行了两次task_done函数, 则join会一直阻塞')

python 队列类及其方法

1.Python的队列类型

from queue import Queue, LifiQueue, PriorityQueue, SimpleQueue
  • FIFO(先入先出)Queue(maxsize=0):FIFO队列的构造函数。maxsize是一个整数,用于设置放入队列中数据的上限。一旦达到此大小,插入将被阻塞。如果maxsize<=0,则队列大小为无限。
  • LIFO(后进先出)LifoQueue(maxsize=0):LIFO队列的构造函数,其它同上。
  • 优先级队列 PriorityQueue(maxsize=0):优先级队列的构造函数,其它同上。
  • SimpleQueue:FIFO队列的简单形式,缺少诸如任务跟踪之类的高级功能。
  • Empty:在空对象上调用get()方法,引发的异常队列。
  • Full:在已满的对象上调用put()方法,引发的异常队列。

2.队列对象(适用Queue、LifoQueue和PriorityQueue)

qsize()

  • 返回队列的大小。
  • 注意qsize()>0不能保证后续的get()不会阻塞,qsize()<maxsize也不能保证对get()的后续调用不会阻塞。

empty()

  • 如果队列是空的返回True,否则返回False。
  • 如果返回True不能保证后续对put()的调用都不会阻塞。如果返回False也不能保证对get()的后续调用不会阻塞。

full()

  • 如果队列满了返回True,否则返回False。
  • 如果返回True不能保证对get()的后续调用不会阻塞。如果full返回False也不能保证后续对put()的调用不会阻塞。

put(item, block=True, timeout=None)

  • 将数据插入队列中。
  • 如果block=True, timeout=None则在必要时进行阻塞,直到队列有空间为止。如果timeout=正数,则它最多超时正数秒。Full队列如果在该时间内没有空间可用,会引发异常。如果block=False,队列有空间,则将数据放入队列(超时被忽略),否则引发Full异常。

put_nowait(item)

  • 等同于put(item, False)。

get(block=True, timeout=None)

  • 从队列中删除并返回一个数据。
  • 如果block=True, timeout=None则在必要时进行阻塞,直到队列有数据为止。如果timeout=正数,则它最多超时正数秒。Empty队列如果在该时间内没有数据可用,会引发异常。如果block=False,队列有数据,则会返回一个数据(超时被忽略),否则引发Empty异常。

get_nowait()

  • 等同于get(False)。

task_done()

  • 表示先前排队的任务已完成。

join()

  • 阻塞直到队列中的所有数据都已获得处理。每当将项目添加到队列时,未完成任务的数量就会增加。每当使用者线程调用task_done()以指示已检索到该项目并且该项目的所有工作完成时,该计数就会减少。当未完成的任务数降至零时,join()取消阻止。

3.SimpleQueue对象

qsize()
empty()
put(item, block = True, timeout = None )
put_nowait(item)
get(block = True,timeout = None)
get_nowait(item)

以上为个人经验,希望能给大家一个参考,也希望大家多多支持编程网。

--结束END--

本文标题: python中的queue队列类型及函数用法

本文链接: https://www.lsjlt.com/news/120632.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
猜你喜欢
  • python中的queue队列类型及函数用法
    目录python queue队列类型及函数1.队列的种类2.队列函数python 队列类及其方法1.Python的队列类型2.队列对象(适用Queue、LifoQueue和Prior...
    99+
    2022-11-11
  • jQuery中队列queue()函数怎么使用
    这篇“jQuery中队列queue()函数怎么使用”文章的知识点大部分人都不太理解,所以小编给大家总结了以下内容,内容详细,步骤清晰,具有一定的借鉴价值,希望大家阅读完这篇文章能有所收获,下面我们一起来看看这篇“jQuery中队列queue...
    99+
    2023-07-04
  • 关于Python中几种队列Queue用法区别
    目录python中使用到的队列模块大致有三个:1、from queue import Queue2、from multiprocessing import Queue3、from m...
    99+
    2023-05-18
    Python 队列 Python Queue
  • C++中队列queue的用法实例详解
    目录一、定义一、queue初始化二、queue常用函数补充:queue 的基本操作举例如下总结一、定义 queue是一种容器转换器模板,调用#include< queue>...
    99+
    2022-11-13
  • Python数据结构之优先级队列queue用法详解
    目录一、基本用法二、LIFO队列三、优先队列一、基本用法 Queue类实现了一个基本的先进先出容器。使用put()将元素增加到这个序列的一端,使用get()从另一端删除。具体代码如下...
    99+
    2022-11-12
  • python中函数的返回值及类型详解
    目录1.返回值介绍2.带有返回值的函数3.保存函数的返回值4.四种函数的类型1.无参数,无返回值的函数2.无参数,有返回值的函数3.有参数,无返回值的函数4.有参数,有返回值的函数5...
    99+
    2023-05-14
    python函数返回值 python 返回值类型
  • Python---限定函数参数的类型及默
    python作为一门动态语言,在使用变量之前是不需要进行定义,而是通过动态绑定的方法将变量绑定为某种类型。这样做为我们使用变量时提供了方便,但有时也给我们使用变量时造成了一定的困扰,例如在使用变量时不知道变量的类型,使用函数时不知...
    99+
    2023-01-31
    函数 参数 类型
  • python中的queue函数怎么使用
    在Python中,`queue`模块提供了实现FIFO(先进先出)队列的类`Queue`和`deque`,以及实现优先级队列的类`P...
    99+
    2023-08-11
    python queue
  • Python数据类型及常用方法
    目录一 引入二 数字类型2.1 int整型2.1.1 作用2.1.2 定义2.2 float浮点型2.2.1 作用2.2.2 定义2.3 数字类型的使用三 字符串类型str3.1 作...
    99+
    2022-11-10
  • Python语言中的数据类型-序列
    目录一、什么是序列数据类型?二、序列数据类型的基本操作1.序列的通用方法2.通过索引访问数据3.同类型的序列进行拼接4.判断序列成员5.序列的排序操作6.内置函数all()与any(...
    99+
    2022-11-13
  • Python中函数的参数类型详解
    目录1、Python的函数参数的类型2、Python的必传参数3、关键字参数4、默认参数5、不定长参数1、Python的函数参数的类型 必传参数:调用函数时必须传入的参数,函数定义时...
    99+
    2022-11-11
  • Python中的函数参数类型检查
    目录Python函数参数类型检查下面我们用装饰器来实现总结Python函数参数类型检查 有一个很经典的笑话: 三个月之前,只有我和上帝知道这代码是干什么的。 现在,只有上帝知道了。 ...
    99+
    2022-12-19
    Python函数 函数参数类型检查 Python函数参数
  • python六种基本数据类型及常用函数展示
    目录number(数字)Number类型常用的函数随机数importrandomstring(字符串)字符串常用的函数list(列表)列表的常用函数set(集合)tuple(元组)d...
    99+
    2022-11-12
  • Python中的bytes类型用法及实例分享
    目录1.bytes定义2.bytes方法3.使用不同方式创建 bytes 对象前言; Python bytes 类型用来表示一个字节串。“字节串“不是编程术语...
    99+
    2022-11-13
  • python中函数的返回值及类型实例代码分析
    这篇“python中函数的返回值及类型实例代码分析”文章的知识点大部分人都不太理解,所以小编给大家总结了以下内容,内容详细,步骤清晰,具有一定的借鉴价值,希望大家阅读完这篇文章能有所收获,下面我们一起来看看这篇“python中函数的返回值及...
    99+
    2023-07-05
  • python列表中remove()函数的使用方法
    python列表中remove()函数的使用方法,针对这个问题,这篇文章详细介绍了相对应的分析和解答,希望可以帮助更多想解决这个问题的小伙伴找到更简单易行的方法。1. 基本使用remove() 函数可以删除列表中的指定元素语法list.re...
    99+
    2023-06-22
  • Python数据类型及常用方法是什么
    这篇文章主要讲解了“Python数据类型及常用方法是什么”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“Python数据类型及常用方法是什么”吧!一 引入我们学习变量是为了让计算机能够像人一样...
    99+
    2023-06-30
  • Python转换数据类型函数和转换数据类型的作用
    目录一、转换数据类型的作用(必要性)二、转换数据类型的函数三、快速体验数据类型转换前言: 学习Python的转换数据类型前期主要学习目标有两个,一是数据类型转换的必要性,二是数据类型...
    99+
    2022-11-13
  • Python类型函数的作用是什么
    Python的类型函数用于确定一个变量的数据类型。它的作用主要有以下几点:1. 确定变量的数据类型:使用类型函数可以确定一个变量的数...
    99+
    2023-09-09
    python
  • 详解Python map函数及Python map()函数的用法
    python map函数 map()函数 map()是 Python 内置的高阶函数,它接收一个函数 f 和一个 list,并通过把函数 f 依次作用在 list 的每个元素上,得到一个新的 list ...
    99+
    2022-06-04
    函数 详解 Python
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作