进击のpython

*****

并发编程——Queue


进程其实就提过这个Queue的问题,我们为什么在进程使用Queue?

是因为当时我们想要对共享数据进行修改,同时也希望它能够自动的给我加个锁

基于上面的需求Queue就应运而生,扛起了这杆大旗

那反观线程这里,数据是共享的,那为什么还要使用Queue呢?

其实线程用Queue也是看上了他能够自己加锁的这个能力,防止自己加锁,出现死锁

单拿出来不是为了划水,而是因为Queue还有一些其他的方法没有介绍到

所以准备重新的再仔细地最后介绍一遍


队列

队列就像是商场里面的自动扶梯,先上扶梯的,也是第一个下去的

所以队列遵循着“先进先出”原则,即:FIFO

import queue

q = queue.Queue()
q.put('first')
q.put('second')
q.put('third') print(q.get())
print(q.get())
print(q.get())

输出结果:

first
second
third

其中如果q = queue.Queue()中括号内填有数字,代表着管道的容积可以最多容纳的单元

如果是这样q = queue.Queue(3),就说明管道中最多容纳三个单位

当我put四次,由于没有从管道中取值,就会引发阻塞

相对应的,如果我get了四次,由于值都已经取完 ,所以也会发生阻塞

其实阻塞是因为Queue中有个默认参数block=True

他的意思就是是否发生阻塞,如果改成False,当‘放多了’或者‘拿多了’,就会报错

里面还有一个默认参数timeout=None是多长时间改变block的状态

q.get(block = True, timeout = 1)

比如此时这个get是第四次get,那就是,现在是阻塞状态,如果1s之内没有值让我get我就报错

堆栈

queue.LifoQueue 堆栈遵循“后进先出”

import queue

q = queue.LifoQueue(3)
q.put('first')
q.put('second')
q.put('third') print(q.get())
print(q.get())
print(q.get())

执行结果如下:

third
second
first

有一句话说得好,队列是“吃了拉”,堆栈是“吃了吐”

优先级队列

queue.PriorityQueue 根据优先级决定

import queue

q=queue.PriorityQueue()

q.put((20,'a'))
q.put((10,'b'))
q.put((30,'c')) print(q.get())
print(q.get())
print(q.get())

put放进去一个元组,元组的第一个元素是优先级(通常是数字,也可以是非数字之间的比较)

数字越小优先级越高!

执行结果如下:

(10, 'b')
(20, 'a')
(30, 'c')

*****
*****

最新文章

  1. Tesla P4 在深度学习上的性价比辗压目前所有量产的FPGA
  2. MyBatis 动态SQL查询,多条件,分页
  3. ioctl()获取本地网卡设备信息
  4. C# 学习笔记01
  5. Validation
  6. Eclipse 浏览文件插件 EasyExplorer 和 OpenExplorer
  7. SSO单点登录的实现原理
  8. Linq101-Restriction
  9. Hadoop 日志分析。
  10. EasyUI - 要引入的JS文件
  11. C#整理 条件语句
  12. Visual Lisp获得网络时间的方法
  13. sublime text注册码(秘钥)
  14. BZOJ 1898: [Zjoi2005]Swamp 沼泽鳄鱼 [矩阵乘法]
  15. Ubuntu16.04下ZeroC ICE的安装与使用示例(Qt C++ 和 Java)
  16. redis启动出错Creating Server TCP listening socket 127.0.0.1:6379: bind: No error(转)
  17. 2019年Python数据挖掘就业前景前瞻
  18. Java基础编程题——素数
  19. js实现截取或查找字符串中的子字符串
  20. 各种排序算法(java)

热门文章

  1. opencv+python实现图像锐化
  2. 基于jQuery的打字机函数
  3. MongoDB快速入门教程 (4.3)
  4. python简易版微信或QQ轰炸
  5. 初探pandas——安装和了解pandas数据结构
  6. 树形dp——三色二叉树
  7. JAVA基础笔记15-16-17-18
  8. Uni-app页面路由小问题
  9. Pop!_OS安装与配置(一):下载安装
  10. 微服务架构中的BFF到底是啥?