python判断队列是否为空_python队列Queue
一、Queue
Queue是python标准库中的线程安全的队列(FIFO)实现,提供了一个适用于多线程编程的先进先出的数据结构,即队列,用来在生产者和消费者线程之间的信息传递
队列在多线程中可以共享,替代全局变量,无需加互斥锁。
队列可以并发的派多个线程,对排列的线程处理,并且每个需要处理线程只需要将请求的数据放入队列容器的内存中,线程不需要等待,当排列完毕处理完数据后,线程再准时来取数据即可。请求数据的线程只与这个队列容器存在关系,处理数据的线程down掉不会影响到请求数据的线程,队列会派给其他线程处理这分数据,它实现了解耦,提高效率。
队列内会有一个有顺序的容器,列表与这个容器是有区别的,列表中数据虽然是排列的,但数据被取走后还会保留,而队列中这个容器的数据被取后将不会保留。当必须在多个线程之间安全地交换信息时,队列在线程编程中特别有用。
二、Python四种类型的队例:
Queue:FIFO 即first in first out 先进先出
LifoQueue:LIFO 即last in first out 后进先出
PriorityQueue:优先队列,级别越低,越优先
deque:双边队列
from queue import Queue, LifoQueue, PriorityQueue
1、Queue 先进先出队列:
q = Queue(maxsize=5)
初始化一个队列,默认是不限定队列的长度,也可以通过参数指定队列中数据的maxsize,如果maxsize小于或者等于0,队列大小没有限制。
put(i,timeout=2) 方法向队列中添加元素,timeout以设置队列中数据满了之后的等待时间(默认一直等待)
q.put(999, block=False) # block=False,往队列中添加数据,不等待,如果队列中数据已满,则会报错
from queue import Queue
q = Queue(maxsize=5) #限定最长为5
for i in range(5):
q.put(i,timeout=2)
print(q)
while not q.empty():
print(q.get())
#输出
0
1
2
3
4
2、LifoQueue 后进先出队列:
创建队列和向队列中添加元素与先进先出队列完全一致
from queue import LifoQueue
q = LifoQueue(5)
for i in range(5):
q.put(i,timeout=2)
print(q)
while not q.empty():
print(q.get())
#输出
4
3
2
1
0
3、优先队列:
from queue import PriorityQueue
import random
q = PriorityQueue(5)
for i in range(5):
x = random.randint(1,99)
q.put((x,f"{i}a"),timeout=2)
print(q)
while not q.empty():
print(q.get())
#输出
(37, '1a')
(44, '2a')
(52, '4a')
(76, '3a')
(77, '0a')
put传递的第一个参数为元组,元组的第一个元素表示数据的优先级
队列中的数据为元组类型:元组的第一个元素表示数据的优先级,优先级越小的先出来
关于优先级,尽量使用数值,如果全是字符串,会按ASCII码进行排序
通用方法
1、往队列中添加数据:q.put( item, block=True, timeout=None)
item为添加的对象
True 往队列中添加数据,如果队列中数据已满,一直等待
bloke=False,往队列中添加数据,不等待,如果队列中数据已满,则报错
timeout不设置,一直等待
timeout设置后等待超过时间则报错
其非阻塞版本为`put_nowait`等同于put(item, block=False)
2、从队列中移除并返回一个数据:q.get([block[, timeout]])
block和timeout用法与put一致
其非阻塞方法为`get_nowait()`相当与get(block=False)
3、判断队列中数据是否为空:empty方法 q.empty()
队列中数据为空,返回True
队列中数据不为空,返回False
4、判断队列中数据是否已满:full q.full()
队列中数据已满,返回True
队列中数据不满,返回False
5、获取队列中任务数量(多少条数据) q.qsize()
6、task_done()
意味着之前入队的一个任务已经完成。由队列的消费者线程调用。每一个get()调用得到一个任务,接下来的task_done()调用告诉队列该任务已经处理完毕。
如果当前一个join()正在阻塞,它将在队列中的所有任务都处理完时恢复执行(即每一个由put()调用入队的任务都有一个对应的task_done()调用)。
7、join()
阻塞调用线程,直到队列中的所有任务被处理掉。
只要有数据被加入队列,未完成的任务数就会增加。当消费者线程调用task_done()(意味着有消费者取得任务并完成任务),未完成的任务数就会减少。当未完成的任务数降到0,join()解除阻塞。
python判断队列是否为空_python队列Queue相关推荐
- python判断一个对象是否为空_python 判断对象是否为空
在实际的工作当中,我们难免要与空值打交道,相信不少初学者都会写出下面的代码:if a is None: do something. else: do the other thing. 云海天教程网,大 ...
- python判断list是否为空_Python - 判断list是否为空
原博文 2018-02-01 19:15 − Python中判断list是否为空有以下两种方式: 方式一: 1 list_temp = [] 2 if len(list_temp): 3 # 存在值即 ...
- python判断变量不为空_Python简洁方法
写代码的时候,我们都希望自己的代码简洁凝练,不至于显得臃肿难看.以下是我搜罗的在写Python代码时,可以简化的一些语句方法. 多变量赋值 将1,2,3赋值给变量i,j,k. 常规方法: i=1 j= ...
- python判断一个对象是否为空的方法_python使用any判断一个对象是否为空的方法
"python"判断字符串是否为空用什么方法? s为字符串 s.isalnum() 所有字符都是数字或者字母 s.isalpha() 所有字符都是字母 s.isdigit() 所有 ...
- python检查列表是否为空_Python 中判断列表是否为空的方法
在判断列表是否为空时,你更喜欢哪种方式?决定因素是什么? 在 Python 中有很多检查列表是否是空的方式,在讨论解决方案前,先说一下不同方法涉及到的不同因素. 我们可以把判断表达式可以分为两个阵营: ...
- python如何判断列表是否为空_python简单判断序列是否为空的方法
python简单判断序列是否为空的方法 本文实例讲述了python简单判断序列是否为空的方法.分享给大家供大家参考.具体如下: 假设有如下序列: m1 = [] m2 = () m3 = {} 判断他 ...
- python判断输入的是空白_python判断是空的实例分享
在实际的工作当中,我们难免要与空值打交道,相信不少初学者都会写出下面的代码: if a is None: do something.else: do the other thing. 这样写看起来不错 ...
- python 判断字符串是否为空,字典是否为空,列表是否为空,元组是否为空的方法
在python 中 None,空列表[],空元组(),空字典{},0都是被程序判断为False ,所以我们判断对象是否为空可以直接是用if x 或者if not x 的方法来判断对象是否为空 2个方法 ...
- python判断字符串是纯数字_python判断字符串是否纯数字的方法
本文实例讲述了python判断字符串是否纯数字的方法.分享给大家供大家参考.具体如下: 判断的代码如下,通过异常判断不能区分前面带正负号的区别,正则表达式可以根据自己需要比较灵活的写,通过isdigi ...
最新文章
- 关键任务应用程序依赖于故障保护存储器
- 大数据日知录要点整理
- IOS开发之自定义Button(集成三种回调模式)
- 安卓开发之Intent系统调用系统相机Camera(中软杯项目)
- ue4 classuobject没有成员beginplay_UE4中蓝图函数的泛型
- 工程师实战:单片机裸机程序框架是怎样炼成的?
- Database2Sharp重要更新之生成Winform框架界面代码
- INFORMIX体系效能改善第一步
- 服务器是用集成网卡好还是独立网卡好
- java实现给图片添加水印(文字水印或图片水印)
- J2EE进阶之自定义标签,JSTL标签,国际化 十四
- pci 1751 java_PCI-1751快速安装使用手册.PDF
- HTTPClient模拟登陆开心网001
- 【Linux】快速入门法宝~你值得拥有
- everything用于移动硬盘资料管理(二):离线搜索全部移动硬盘
- 淘宝双十一前卖家要做好哪些准备?
- 我的java开发总结
- MATLAB矩阵分块拼装
- 解决VirtualBox CentOS8无法调整分辨率的问题
- oracle数据库latch,关于Oracle数据库latch: cache buffers chains等待事件