queue模块笔记
queue被称为消息队列,数据不会混乱,也可以用于复杂业务传递元素,队列是多线程的利器,其内部有锁的机制可以控制数据的统一且安全
queue.Queue()按照先进先出原则
queue.LifoQueue()按照后进先出原则
queue.PriorityQueue()优先级队列,数字越小优先级越高
import queue
import time
t = queue.Queue(2)#设置列队大小,如果有三条数据过来那就会等待,直到取走为止
t.put('a')#put 放入列队,
t.get()
t.put('b')
t.put('c')
while True:
print(t.get())#取
time.sleep(2)
full,empty
import queue
t = queue.Queue(3)#不填就是无限
t.put('a')
print(t.empty())#问:没了吗? 如果列队中有值返回False
t.get()
print(t.empty())#没了,返回True
t.put('b')
t.put('c')
t.put('d')
print(t.full())#问:满了吗? 如果列队中满了返回True
t.get()
print(t.full())#没有满,返回false
#如果满了使用put或者空了使用get同样会报错
put
block=True
import queue
t = queue.Queue(maxsize=3)
t.put('a')
t.put('b')
t.put('c')
t.put('d',True,3)
#Queue.put(item, block=True, timeout=None),item元素,如果block=True且timeout=None该方法将一直等待直到有队列有空余空间
#如果block=True且timeout=3,也就是在3秒后抛出异常
block=False
import queue
t = queue.Queue(maxsize=3)
t.put('a')
t.put('b')
t.put('c')
t.put('d',False,None)#只要block=False,不管设不设时间,立马就会抛出异常
get
block=True
import queue
t = queue.Queue(maxsize=3)
t.get(block=True,timeout=3)#报错了
#t.get(block=True)#这样为空就等于都不写,不报错
#默认Queue.get(block=True, timeout=None),如果设置了timeout
block=False
import queue
t = queue.Queue(maxsize=3)
t.get(block=False,timeout=3)#不管设不设时间,立即报错
get_nowait和put_nowait
t.get_nowait()#立即取出一个元素,t.get_nowait(item)等价于get(item,False)
t.put_nowait('f')#立即放入一个元素,t.put_nowait(item)等价于put(item, False)
其他
t.task_done()#在完成一项工作之后,queue.task_done()函数向任务已经完成的队列发送一个信号
print(t.qsize())#返回当前队列中元素个数
t.join()#实际上意味着等到队列为空,再执行别的操作
#以上是线程queue,如果是进程之间需要相互通信(一发一收),可以主进程的对象作为一个参数传给子进程,只是copy主进程的对象,主进程和子进程不是相互公用同一数据
版权声明:本文原创发表于 博客园,作者为 RainBol本文欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,否则视为侵权。
queue模块笔记的更多相关文章
- Python多线程笔记(三),queue模块
尽管在Python中可以使用各种锁和同步原语的组合编写非常传统的多线程程序,但有一种首推的编程方式要优于其他所有编程方式即将多线程程序组织为多个独立人物的集合,这些任务之间通过消息队列进行通信 que ...
- Python3.5 queue模块详解
queue介绍 queue是python中的标准库,俗称队列,可以直接import 引用,在python2.x中,模块名为Queue 在python中,多个线程之间的数据是共享的,多个线程进行数据交换 ...
- python Queue模块
先看一个很简单的例子 #coding:utf8 import Queue #queue是队列的意思 q=Queue.Queue(maxsize=10) #创建一个queue对象 for i in ra ...
- Python之队列queue模块使用 常见问题与用法
python 中,队列是线程间最常用的交换数据的形式.queue模块是提供队列操作的模块,虽然简单易用,但是不小心的话,还是会出现一些意外. 1. 阻塞模式 import queue q = queu ...
- Python多线程(3)——Queue模块
Queue模块支持先进先出(FIFO)队列,支持多线程的访问,包括一个主要的类型(Queue)和两个异常类(exception classes). Python 2 中的Queue模块在Python ...
- threading模块和queue模块实现程序并发功能和消息队列
简介: 通过三个例子熟悉一下python threading模块和queue模块实现程序并发功能和消息队列. 说明:以下实验基于python2.6 基本概念 什么是进程? 拥有独立的地址空间,内存,数 ...
- 同步队列-Queue模块解析
Queue模块解决了生产者.消费者问题,在多线程编程中进行线程通信的时候尤其有用,Queue类封装了加锁解锁的过程. 在Queue模块中有三种不同的队列类,区别是不同队列取出数据的顺序 ...
- 【Python@Thread】queue模块-生产者消费者问题
python通过queue模块来提供线程间的通信机制,从而可以让线程分项数据. 个人感觉queue就是管程的概念 一个生产者消费者问题 from random import randint from ...
- Python之Queue模块
Queue 1.创建一个“队列”对象 >>> import Queue >>> queue = Queue.Queue(maxsize=100) >>& ...
随机推荐
- C# 代码自动生成工具
开源:C# 代码自动生成工具,支持站点前后台 前言 写这个项目有很长一段时间了,期间也修修改改,写到最后,自己也没咋用(研究方向变化了). 正文 具体项目开源了:https://github.co ...
- PMP备考笔记--1.1
题型 200道中英文单选题 基本概念题(%10) 过程工具/技术和输入输出题ITTO (%10) 情景题(%70) 计算题(3-5道题) 图 pmp四大挑战 试卷100页,题干长,阅读量大,考试4个小 ...
- PS命令和kill命令
名称:ps使用权限:所有使用者使用方式:ps [options] [--help]说明:显示瞬间行程 (process) 的动态参数:ps的参数非常多, 在此仅列出几个常用的参数并大略介绍含义-A ...
- HBase 与 MapReduce 集成
6. HBase 与 MapReduce 集成 6.1 官方 HBase 与 MapReduce 集成 查看 HBase 的 MapReduce 任务的执行:bin/hbase mapredcp; 环 ...
- [Oracle] - 使用 DBMS_UTILITY 查看异常详情
DBMS_UTILITY.FORMAT_ERROR_BACKTRACE说明:这是在Oracle 10g数据库引入的,DBMS_UTILITY.FORMAT_ERROR_BACKTRACE内置函数返回一 ...
- Python18之函数定义及调用,注释
一.函数定义 def 函数名(形参1,形参2...): 函数体 return 返回值 (可以返回任何东西,一个值,一个变量,或是另一个函数的返回值,如果函数没有返回值,可以省略retu ...
- python 之 并发编程(进程池与线程池、同步异步阻塞非阻塞、线程queue)
9.11 进程池与线程池 池子使用来限制并发的任务数目,限制我们的计算机在一个自己可承受的范围内去并发地执行任务 池子内什么时候装进程:并发的任务属于计算密集型 池子内什么时候装线程:并发的任务属于I ...
- Springboot对JPA的支持及使用
目的: 1.springboot之jpa支持 2.Springboot+bootstrap界面版之增删改查及图片上传 springboot之jpa支持 导入相关pom依赖 <dependency ...
- Jmeter之分布式测试/压测
Jmeter做分布式测试的原因: 测试机器的配置低,对服务器进行压测时,造成不了压力. jmeter并发10000后,测试机就已经卡顿了,而且测试结果有大量失败(忽略了jmeter自身问题=.=||| ...
- java -jar 参数前后位置说明
springboot项目启动的时候可以直接使用java -jar xxx.jar这样.下面说说参数的一些讲究 1.-DpropName=propValue的形式携带,要放在-jar参数前面 eg:ja ...