python基础 — Queue 队列
queue介绍
queue是python中的标准库,俗称队列。
在python中,多个线程之间的数据是共享的,多个线程进行数据交换的时候,不能够保证数据的安全性和一致性,所以当多个线程需要进行数据交换的时候,队列就出现了,队列可以完美解决线程间的数据交换,保证线程间数据的安全性和一致性。
注意: 在python2.x中,模块名为Queue python3.x 为 queue
queue模块有三种队列及构造函数:
Python queue模块的FIFO队列 先进先出。 queue.Queue(maxsize)
LIFO类似于堆,即先进后出。 queue.LifoQueue(maxsize)
还有一种是优先级队列级别越低越先出来。 queue.PriorityQueue(maxsize)
queue模块中的常用方法
queue.get([block[, timeout]])获取队列,立即取出一个元素, timeout超时时间
queue.put(item[, timeout]]) 写入队列,立即放入一个元素, timeout超时时间
queue.join() 阻塞调用线程,直到队列中的所有任务被处理掉, 实际上意味着等到队列为空,再执行别的操作
queue.get_nowait() 相当于queue.get(False)
queue.put_nowait(item) 相当于queue.put(item, False)
queue.qsize() 返回队列的大小
queue.empty() 如果队列为空,返回True,反之False
queue.full() 如果队列满了,返回True,反之False
queue.full 与 maxsize 大小对应
queue.task_done() 在完成一项工作之后,queue.task_done()函数向任务已经完成的队列发送一个信号
基本使用例子:
import queue q = queue.Queue(2)
q.put('a')
q.put('b')
print(q.full()) # True
print(q.qsize()) # 2
print(q.queue[0]) # 获取队列的第1位元素 : a
print(q.queue) # 打印队列内容 : deque(['a','b'])
print(q.get()) # a
print(q.get()) # b
print(q.empty()) # True
创建队列priority 优先级模式 用的不多
put的时候输入优先级级别和数据
import queue q = queue.PriorityQueue()
q.put([1, "hello"])
q.put([3,"la"])
q.put([2,"Niu"])
q.put([1,"world"])
while not q.empty():
print(q.get()) ''' 输出
[1, 'hello']
[1, 'world']
[2, 'Niu']
[3, 'la']
'''
队列的原理:
class queue(object):
"""队列"""
def __init__(self):
self.__list=[]
def enqueue(self,item):
"""入队"""
self.__list.append(item)
def dequeue(self):
"""出队"""
return self.__list.pop(0)
def is_empty(self):
"""判断是否为空"""
return self.__list==[]
def size(self):
"""判断大小"""
return len(self.__list)
if __name__=="__main__":
s=queue()
s.enqueue(1)
s.enqueue(2)
s.enqueue(3)
s.enqueue(4)
print(s.dequeue())
print(s.size())
print(s.dequeue())
print(s.dequeue())
print(s.dequeue())
print(s.is_empty())
python基础 — Queue 队列的更多相关文章
- C#基础---Queue(队列)的应用
Queue队列,特性先进先出. 在一些项目中我们会遇到对一些数据的Check,如果数据不符合条件将会把不通过的信息返回到界面.但是对于有的数据可能会Check很多条件,如果一个数据一旦很多条件不 ...
- Python第十五天 datetime模块 time模块 thread模块 threading模块 Queue队列模块 multiprocessing模块 paramiko模块 fabric模块
Python第十五天 datetime模块 time模块 thread模块 threading模块 Queue队列模块 multiprocessing模块 paramiko模块 fab ...
- python基础之Event对象、队列和多进程基础
Event对象 用于线程间通信,即程序中的其一个线程需要通过判断某个线程的状态来确定自己下一步的操作,就用到了event对象 event对象默认为假(Flase),即遇到event对象在等待就阻塞线程 ...
- python基础-12 多线程queue 线程交互event 线程锁 自定义线程池 进程 进程锁 进程池 进程交互数据资源共享
Python中的进程与线程 学习知识,我们不但要知其然,还是知其所以然.你做到了你就比别人NB. 我们先了解一下什么是进程和线程. 进程与线程的历史 我们都知道计算机是由硬件和软件组成的.硬件中的CP ...
- Python自动化运维之16、线程、进程、协程、queue队列
一.线程 1.什么是线程 线程是操作系统能够进行运算调度的最小单位.它被包含在进程之中,是进程中的实际运作单位. 一条线程指的是进程中一个单一顺序的控制流,一个进程中可以并发多个线程,每条线程并行执行 ...
- python中的Queue(队列)详解
一.Queue简介 python中的队列分类可分为两种: 1.线程Queue,也就是普通的Queue 2.进程Queue,在多线程与多进程会介绍. Queue的种类: FIFO: Queue.Que ...
- python threading模块使用 以及python多线程操作的实践(使用Queue队列模块)
今天花了近乎一天的时间研究python关于多线程的问题,查看了大量源码 自己也实践了一个生产消费者模型,所以把一天的收获总结一下. 由于GIL(Global Interpreter Lock)锁的关系 ...
- Python线程优先级队列(Queue)
Python的Queue模块中提供了同步的.线程安全的队列类,包括FIFO(先入先出)队列Queue,LIFO(后入先出)队列 LifoQueue,和优先级队列PriorityQueue.这些队列都实 ...
- python多线程--优先级队列(Queue)
Python的Queue模块中提供了同步的.线程安全的队列类,包括FIFO(先入先出)队列Queue,LIFO(后入先出)队列LifoQueue,和优先级队列PriorityQueue.这些队列都实现 ...
随机推荐
- css 网格布局
一.概述 网格布局(Grid)是最强大的 CSS 布局方案. 它将网页划分成一个个网格,可以任意组合不同的网格,做出各种各样的布局.以前,只能通过复杂的 CSS 框架达到的效果,现在浏览器内置了. 上 ...
- CI持续集成 -- git 与 gitlab
版本控制系统概述 git Git基本概述 Git是一个免费的开源分布式版本控制系统,旨在快速高效地处理从小型到大型项目的所有内容. Git安装配置 #安装Git yum install -y git ...
- C1010 unexpected end of file while looking for precompiled header. Did you forget to add '#include "stdafx.h"' to your source
提示说是预编译出现问题,提示添加头文件stdafx.h,但是添加了也会继续有其他错误解决方法: 在菜单Project->Properties(或者直接快捷键Alt+F7)->C/C++-& ...
- BZOJ 1477: 青蛙的约会
二次联通门 : BZOJ 1477: 青蛙的约会 /* BZOJ 1477: 青蛙的约会 扩展欧几里得 列出方程, 判断一下 */ #include <iostream> #include ...
- TCP网络程序设计
tcp_server.c #include<stdio.h>#include<sys/socket.h>#include<string.h>#include< ...
- 【洛谷P3369】普通平衡树——Splay学习笔记(一)
二叉搜索树(二叉排序树) 概念:一棵树,若它的左子树不空,则左子树上所有结点的值均小于它的根结点的值: 若它的右子树不空,则右子树上所有结点的值均大于它的根结点的值: 它的左.右子树也分别为二叉搜索树 ...
- GoCN每日新闻(2019-10-24)
GoCN每日新闻(2019-10-24) GoCN每日新闻(2019-10-24) 1. 学习Golang之服务器框架编写 – CS网络通信 http://1t.click/aJag 2. 如何实现 ...
- mysql abs() 获取绝对值
mysql> -); +----------+ | abs(-) | +----------+ | | +----------+ row in set (0.00 sec)
- 2019牛客国庆集训派对day1
C 存每个值存在的位置,枚举末尾的值,再枚举前面的值,哈希二分出最长相同的,即剩下的为不同的 D \(f_{i,j,k}\)为前i位,最后一个3因子在j,次因子在k G bitset处理有多少位置符合 ...
- 刷题记录:[De1ctf] shell shell shell
目录 刷题记录:[De1ctf] shell shell shell 一.知识点 1.源码泄露 2.正则表达式不完善导致sql注入 3.soapclient反序列化->ssrf 4.扫描内网 5 ...