今天讲一下队列,用到一个python自带的库,queue

队列的三种实现方法有:

      1、FIFO先入先出队列(Queue)

      2、LIFO后入先出队列(LifoQueue)

      3、优先级队列(PriorityQueue)

先讲一下Queue中的几个方法

# 三种 FIFO  LIFO Priority
# 创建先入先出的队列
# q = queue.Queue() # q.qsize() # 返回当前队列包含的消息数量
# q.empty() # 如果队列为空返回True 反之False
# q.full() # 如果队列满了,返回True 反之False
# q.get() # 获取队列,timeout等待时间 get(self, block=True,timeout=None) block表示是否等待 timeout表示等待多久
# q.put(item) # 写入队列 put(self, item, block=True,timeout=None) block表示是否等待 timeout表示等待多久
# q.get_nowait() # 相当于q.get(False) 获取不等待
# q.put_nowait() # 相当于 q.put(item,False) 写入不等待
# q.task_done() # 在完成一项工作之后,使用这个方法可以向队列发送一个信号,表示该任务执行完毕
# q.join() # 等待队列中所有任务(数据)执行完毕之后再往下执行,否则一直等待
# 注意点 :join是判断的依据。不单单指的是队列中没有数据,数据get出去之后,要使用task_done向队列发送一个信号,表示该任务执行完毕
# /数据使用完毕

在下面我们用代码来解释

Queue:先入先出队列

import queue
q1 = queue.Queue(3)  # 定义3 指定队列长度 表示只能塞3条数据 不写可以无限塞
q1.put(1) # 等待插入
q1.put(11)
q1.put(33)
# q1.put(33,block=False) # 不等待插入 满了之后报错
# q1.put_nowait(33) # 不等待插入 满了之后报错
print(q1.get())
print(q1.get()) # 先入先出获取 1先出 33最后出
print(q1.get())
# print(q1.get(block=False)) # 不等待获取 队列为空报错
# print(q1.get_nowait()) # 不等待获取 队列为空报错
# q1.put(3)
print(q1.qsize()) # 获取队列中的任务数/消息数
print(q1.full()) # 判断队列是否已满
print(q1.empty()) # 判断队列是否为空 q1.task_done()
q1.task_done()
q1.task_done() # 插入一条数据使用完成之后就要发送一条消息 q1.join() # 收到task_done返回的信号,当都使用完成之后才会继续往下执行 如果任务没有完成那将不会向下执行
print('join之后')

LifoQueue:后入先出队列

import queue

q = queue.LifoQueue(3)

q.put(1)
q.put(2)
q.put(3)
print(q.get())
print(q.get())
print(q.get()) # 后进先出 其他方法与FIFO相同

PriorityQueue:优先级队列

import queue

q = queue.PriorityQueue(3)  # 其他方法与 FIFO 相同
q.put((1, '哈哈1')) # 接受元组为参数 第一个是优先级数字型的 第二个是数据
q.put((88, '哈哈88'))
q.put((3, '哈哈3'))
print(q.get())
print(q.get())
print(q.get()) # 根据前面的优先级出,优先级数字小的先出

利用队列可以解决多线程对共享全局变量的一个处理

最新文章

  1. C语言 · 4_2找公倍数
  2. CI生成查询记录集result(),row(),row_array().....
  3. iOS Apple Pay
  4. 比较两个文件文件可以使用MD5比较工具
  5. CSS中a标签样式的“爱恨”原则
  6. PHP集成支付宝快速实现充值功能
  7. 成功的背后!(给所有IT人)----转载:来自CSDN第一名博主
  8. fullPage.js插件用法(转发)
  9. Ajax实现xml文件数据插入数据库(一)--- 构建解析xml文件的js库
  10. JS —— 数组与字符串方法
  11. 【Unity与23种设计模式】责任链模式(Chain of Responsibility)
  12. angular部署到iis出现404解决方案
  13. $ sudo python -m pip install pylint 出错解决方法
  14. apache目录别名
  15. P1280 尼克的任务 线性DP
  16. MySQL提示“错误2:系统找不到指定文件”
  17. Dubbo -- 系统学习 笔记 -- 成熟度
  18. SQL 错误 823 I/O error (bad page ID) detected during read【修复方法】
  19. localstorage - HTML 5 Web 存储总结---【巷子】
  20. 『ACM C++』 PTA 天梯赛练习集L1 | 052-053

热门文章

  1. python之路---装饰器函数
  2. 高效code review指南
  3. STM32CubeMx——串口使用DMA收发
  4. Visdom 介绍 | 二
  5. NatApp 外网映射工具
  6. ios 13 陀螺仪DeviceOrientationEvent需要申请用户权限
  7. 自动化运维Ansible之常用模块
  8. 【poj 2429】GCD & LCM Inverse (Miller-Rabin素数测试和Pollard_Rho_因数分解)
  9. Aplayer搭配Metingjs音乐插件的使用
  10. 如何基于layui的laytpl实现数据绑定