什么是队列?(Python队列)

前言

上篇文章介绍了

Python 中的多线程​mp.weixin.qq.com

。今天来介绍下编程中常会用到的一个数据结构 - 队列。

不知道大家是否还记得什么是数据结构呢?在很早很早以前,Python小课堂的初期,讲了许多 Python 原生的数据结构。比如 list、tuple、dict 等。。。

既然叫数据结构,实际上就是为了给计算机存储数据用的一种结构体。不同的数据结构都有其不同的特点。那今天就来简单地聊聊队列!

队列的概念

抛开计算机知识体系,在咱们的生活中,队列这个词其实挺好想象的,因为无时无刻都可以见到。比如等公交的时候,需要排队。比如买东西交钱的时候,也要排队。在这些例子中,由人们有序形成的队形就叫队列。

生活中的排队,有没有什么特性而言呢?大家可以思考下,再往下看。

普通队列的特性,即先进先出(FIFO,first in first out)。对应到生活中,怎么理解这个先进先出?其实很好理解。

拿排队买东西来说,每次排在队首的人,交完钱肯定是当前队列中第一个离开收银台的人。当队首的人离开了,那么后面的所有人都要往前走,继续结账。

对应到计算机中的队列,就是因为第一个人先排的队,所以他第一个交完钱就可以离开了,即先进先出。(多说句,计算机世界许多东西其实就是抽象的现实世界示例。)

心细的同学会发现,在上面将普通两字标粗了,那一定还有一些其它的常用特殊队列,比如优先级队列。(PriorityQueue)

这次拿去银行办业务来举例。生活中我们去银行办理业务,一般都需要去机器拿号,然后等待着柜台业务人员叫号。叫到你,你就过去处理就行了。但是银行是有 vip 服务的,拥有 vip 权益的人可以更快的享受到业务办理,也就是说人家比你有更高的优先权。vip特权通道,你值得拥有!

了解了生活中的例子,再来看看比较专业的定义:

优先级队列(priority queue) 是0个或多个元素的集合,每个元素都有一个优先权,对优先级队列执行的操作有(1)查找(2)插入一个新元素 (3)删除 一般情况下,查找操作用来搜索优先权最大的元素,删除操作用来删除该元素 。对于优先权相同的元素,可按先进先出次序处理或按任意优先权进行。
百度百科

也就是说,在优先级队列中,每个人都有一个优先权对应,谁的优先权高,谁就会先被处理。大家了解即可。

示例演示

示例情景:

假设下面有 6 个美少女,她们准备去量身高,恰好这几个妹纸是按照从高到低,从大到小排好队的。

每走一个去量身高,这个队列中就会少一个人。当然,队首在左,队尾在右,于是她们的变化是下面这样:

。。。。。。省略,直到:

代码演示

是不是好多人看到这里就不打算看了。。不是让你来看美少女的喂。。。下面才是重点~

第一部分代码:

import 

简单的讲解下,在 Python3 中,有个模块叫 queue。里面实现了几个队列的数据结构。首先看 do_work() 函数,其中它就是用来打印妹子姓名和年龄的。worker() 函数中写了一层死循环,只要队列中有妹纸的数据,就一直执行打印,直到队列中的妹纸都没了,就跳出。

第二部分代码:

q 

首先创建队列,其次,让这 6 个美少女开始依次排入到队列中,开启多线程去执行 worker() 这个函数。worker() 函数就是第一部分代码中,从队列里一个个取出妹纸,在调用 do_work() 打印她们的姓名和年龄。

关于队列的 join() 方法,可以看到官方给的英文注释,大意是当所有任务完成时才继续执行后面的代码,否则处于阻塞状态。

代码中涉及的方法,老规矩,希望大家可以自己去查阅 Python 官方文档,搜索 queue 即可看到。当然如果懒得动手的话,笔者这里截图几个常用方法:

将妹纸放入队列中:

从队列中获取妹纸:

获取队列中妹纸的个数:

总结

通过两篇文章,简单的介绍了一下多线程和队列,目的是为了接下来的多线程队列爬虫示例做准备,如果对这些不了解的话,在后面的代码中是很难看懂的。

关于队列的使用,最常用的方法应该就是放入、获取、判断队列的大小。其实这三点在大部分数据结构里都是常用的操作,熟练掌握即可。

本章完整代码,就是文中第一部分和第二部分的代码拼接,因为太长,所以分开讲了下。

如果大家有什么问题想沟通,可以留言交流哈!

c++ 优先队列_什么是队列?(Python队列)相关推荐

  1. python 优先队列_示例讲解:python队列原理及实现方法与操作思路

    今天为大家带来的内容是:示例讲解:python队列原理及实现方法与操作思路 本文内容主要介绍了python队列原理及实现方法,结合实例形式详细分析了Python队列的概念.原理.定义及基本操作技巧,需 ...

  2. 栈和队列——python

    目录 一.栈 定义一个栈 栈的应用--括号匹配问题 栈的应用--迷宫问题 二.队列 自定义队列 python队列的内置模块 队列应用--打印文件后五行 队列应用--迷宫问题 python的数据结构与算 ...

  3. python循环队列_JS 队列-优先队列、循环队列

    <学习JavaScript数据结构与算法>读书笔记. 队列是遵行FIFO(First In First Out, 先进先出)原则的一组有序的项.队列再尾部添加新元素,并从顶部移除元素. 在 ...

  4. python队列只能一个个读取吗_python队列Queue的详解

    Queue Queue是python标准库中的线程安全的队列(FIFO)实现,提供了一个适用于多线程编程的先进先出的数据结构,即队列,用来在生产者和消费者线程之间的信息传递 基本FIFO队列 clas ...

  5. 第二百九十二节,RabbitMQ多设备消息队列-Python开发

    RabbitMQ多设备消息队列-Python开发 首先安装Python开发连接RabbitMQ的API,pika模块 pika模块为第三方模块  对于RabbitMQ来说,生产和消费不再针对内存里的一 ...

  6. java先进先出 循环队列,JavaScript队列、优先队列与循环队列

    队列是一种遵从先进先出(FIFO)原则的有序集合 队列在尾部添加新元素,从顶部移除元素 队列的理解 队列在我们生活中最常见的场景就是排队了 队列这个名字也已经很通俗易懂了 和栈很像,这不过队列是先入先 ...

  7. python队列实现_Python 数据结构之队列的实现

    Python 队列 Queue 队列是一种先进先出(FIFO)的数据类型, 新的元素通过 入队 的方式添加进 Queue 的末尾, 出队 就是从 Queue 的头部删除元素. 用列表来做 Queue: ...

  8. Python队列Queue

    Python队列Queue Queue是python标准库中的线程安全的队列(FIFO),提供了一个多线程的先进先出的数据结构,即队列,用来在生产者和消费者线程之间的信息传递. 常见方法 1.put( ...

  9. python队列溢出_python – 多处理队列maxsize限制是32767

    我正在尝试使用多处理编写Python 2.6(OSX)程序,并且我想填充一个超过默认值32767项的Queue. from multiprocessing import Queue Queue(2** ...

最新文章

  1. js事件触发器fireEvent和dispatchEvent
  2. 产品经理岗位职责说明_公司销售经理岗位职责说明书
  3. 怎样修改flash builder注释里的@author
  4. 基于表单的网站身份验证的权威指南[关闭]
  5. html5的网页布局工具,HTML5网站响应式布局的主流设计方法介绍及工具推荐
  6. The python debugger(PDB)的简介
  7. 阿里云linux上安装与配置Mysql
  8. 内涝预测过程的噪音_第七章噪声解析
  9. linux服务器文件名称乱码,linux中文文件名乱码怎么解决?
  10. Nginx配置SSL报错 nginx: [emerg] unknown directive ssl
  11. [分治] leetcode 23 合并K个升序链表
  12. IDEA 忽略CSS错误
  13. Tomcat运行时报内存溢出
  14. gif一键抠图 在线_不会PS,怎么免费在线抠图?一键轻松制作头像
  15. 扩展欧几里得模板+例题
  16. 左手读红楼梦,右手写 BUG,闲快活
  17. 用相关法辨识系统的脉冲响应 matlab,利用相关分析法辨识脉冲响应
  18. 微信小程序的设计以及demo
  19. 零基础学习之万物皆可GAN学习路线
  20. 了解世界杯赔率,让您运气更‘好‘(个人分享)

热门文章

  1. 什么是网络层?网络层概述—Vecloud微云
  2. Linux文件权限(3)
  3. bzoj3450 Easy(概率期望dp)
  4. linux tomcat下部署多个项目启动失败
  5. ArcGIS API for Silverlight 实现修改地图上的工程点位置
  6. 分布式存储(姚文辉)
  7. CListCtrl使用技巧汇总
  8. 匿名内部类和局部内部类访问的外部类的局部变量必须是final的
  9. 通用联手谷歌,应用程序和语音助手将整合到车辆中
  10. 高斯噪声、高斯白噪声解析