1.作用:解耦,提高效率。队列就是一个容器,一个有顺序的容器。

q.queue.Queue(maxsize=3): 生成一个队列的实例,并且最多存储3个元素

q.get(item,block=Ture, timeout=None ): 从队列里取数据

q.get( block=Ture, timeout=None) :  两个可选参数,默认取不到数据就阻塞

q.get( block=False): 取不到数据不阻塞,而是抛出异常

q.get( timeout=1):  卡1秒

q.qsize( ): 查询队列中还剩多少元素。

#先进先出
import queue
q=queue.Queue() #生成一个队列的实例
q.put('d1')
q.put('d2')
q.put('d3')
print(q.qsize())
print(q.get())

运行结果:

3
d1

2. Lifo: last in first out, 后进先出

import queue
q=queue.LifoQueue()
q.put(1)
q.put(2)
q.put(3)
print(q.get())
print(q.get())
print(q.get())

运行结果:

3
2
1

3. 存储数据是可设置优先级的队列 queue.PriorityQueue(maxsize=0)

import queue
q=queue.PriorityQueue()
q.put((10,'Alex'))
q.put((2,'Jack'))
q.put((5,'Tom')) print(q.get())
print(q.get())
print(q.get())

运行结果:

(2, 'Jack')
(5, 'Tom')
(10, 'Alex')

4. 生产者消费者模型

import threading,time,queue
q=queue.Queue(maxsize=10) def Producer(name):
count=1
while True:
q.put("骨头%s" % count)
print('骨头',count)
count+=1
time.sleep(0.1) def Consumer(name):
while True:
print('%s 吃到了 %s'%(name,q.get()))
time.sleep(1)
p=threading.Thread(target=Producer,args=('alex',))
c1=threading.Thread(target=Consumer,args=('张三',))
c2=threading.Thread(target=Consumer,args=('李四',)) p.start()
c1.start()
c2.start()

运行结果:

骨头 1
张三 吃到了 骨头1
骨头 2
李四 吃到了 骨头2
骨头 3
骨头 4
骨头 5
骨头 6
骨头 7
骨头 8
骨头 9
骨头 10
骨头 11
张三 吃到了 骨头3
骨头 12
李四 吃到了 骨头4
骨头 13
骨头 14
骨头 15
张三 吃到了 骨头5
骨头 16
李四 吃到了 骨头6
骨头 17
张三 吃到了 骨头7
李四 吃到了 骨头8
骨头 18
骨头 19
张三 吃到了 骨头9
李四 吃到了 骨头10
骨头 20
张三 吃到了 骨头11
骨头 21
李四 吃到了 骨头12
骨头 22
张三 吃到了 骨头13
骨头 23
李四 吃到了 骨头14

queue队列的更多相关文章

  1. C#基础---Queue(队列)的应用

       Queue队列,特性先进先出. 在一些项目中我们会遇到对一些数据的Check,如果数据不符合条件将会把不通过的信息返回到界面.但是对于有的数据可能会Check很多条件,如果一个数据一旦很多条件不 ...

  2. 第19章 queue队列容器

    /* 第19章 queue队列容器 19.1 queue技术原理 19.2 queue应用基础 19.3 本章小结 */ // 第19章 queue队列容器 // 19.1 queue技术原理 // ...

  3. atitit. java queue 队列体系and自定义基于数据库的队列总结o7t

    atitit. java queue 队列体系and自定义基于数据库的队列总结o7t 1. 阻塞队列和非阻塞队列 1 2. java.util.Queue接口, 1 3. ConcurrentLink ...

  4. C#部分---特殊集合:stack栈集合、queue队列集合、哈希表集合。

    1.stack栈集合:又名 干草堆集合 栈集合 特点:(1)一个一个赋值 一个一个取值(2)先进后出实例化 初始化 Stack st = new Stack(); //添加元素用push st.Pus ...

  5. 实现一个线程安全的Queue队列

    使用装饰者模式实现一个线程安全的Queue队列. public class SynchronizedQueue<E> implements Queue<E>, Serializ ...

  6. Python自动化运维之16、线程、进程、协程、queue队列

    一.线程 1.什么是线程 线程是操作系统能够进行运算调度的最小单位.它被包含在进程之中,是进程中的实际运作单位. 一条线程指的是进程中一个单一顺序的控制流,一个进程中可以并发多个线程,每条线程并行执行 ...

  7. Stack集合 Queue队列集合 Hashtable哈希表

    Stack集合 干草堆集合 栈集合 栈;stack,先进后出,一个一个赋值,一个一个取值,安装顺序来. 属性和方法 实例化 初始化 Stack st = new Stack(); 添加元素 个数 Co ...

  8. Python第十五天 datetime模块 time模块 thread模块 threading模块 Queue队列模块 multiprocessing模块 paramiko模块 fabric模块

    Python第十五天  datetime模块 time模块   thread模块  threading模块  Queue队列模块  multiprocessing模块  paramiko模块  fab ...

  9. python threading模块使用 以及python多线程操作的实践(使用Queue队列模块)

    今天花了近乎一天的时间研究python关于多线程的问题,查看了大量源码 自己也实践了一个生产消费者模型,所以把一天的收获总结一下. 由于GIL(Global Interpreter Lock)锁的关系 ...

  10. (8)进程---Queue队列

    # IPC Inter-Process Communication # 实现进程之间通信的两种机制: # 管道 Pipe 用的很少 # 队列 Queue 队列的特征:现进先出,栈属于后进后出 基本语法 ...

随机推荐

  1. cocos2d-x3.7 cclabel文字破碎,异常,变乱

    效果图如下: 无论是按钮(control button),还是普通的label都有小概率出现这种情况. 该问题发现于cocos2d-x3.7 原因: 在3.x中使用ttfconfig创建的label, ...

  2. 使用PowerDesign15反向生成数据库

           在Pd15中建立物理模型后,可以通过反向工程直接生成数据库的表结构.主要有以下几个步骤: 1. 首先设置一下数据库配置,选择对应要使用的数据库(此处选择Sql Server 2008 R ...

  3. GitLab 自动触发 Jenkins 构建

    GitLab 是当前应用非常广泛的 Git Hosting 工具,Jenkins 是非常牛逼的持续集成工具.尽管 GitLab 有内建的 GitLab CI,但它远没有 Jenkins 那么强大好用. ...

  4. python3读取csv文件

    代码如下 import csv with open('D:\\abc\\userinfo.csv',newline='') as f: reader = csv.reader(f) for row i ...

  5. Python 发邮件例子

    Python 发邮件例子 例子 #!/usr/bin/env python # -*- coding: utf-8 -*- # @Date : 2019-04-23 16:12:33 # @Autho ...

  6. TW实习日记:第11、12天

    这两天其实都在做一件事,项目组组长丢了个需求下来,要求完成一个百度地图api的页面.原本以为和之前写微信接口的类似,没想到这次问题这么多.并且在写代码的时候和组长交流不畅导致心情也很差,深刻的反思了一 ...

  7. spark dataset join 使用方法java

    dataset<Row> df1,df2,df3 //该方法可以执行成功 df3= df1.join(df2,"post_id").selectExpr("h ...

  8. Vue-cli 工具 / 通过 Vue-cli 工具重构 todoList

    本博文归纳在 Vue 学习过程中, Vue-cli 工具的使用说明.除此之外还通过 Vue-cli 工具将之前 Vuejs 基本语法当中实现的 todoList 进行重构. 安装 npm instal ...

  9. springMVC怎么改变form的提交方式为put或者delete

    想着练习一下创建restful风格的网站呢,结果发现在jsp页面上并不能灵活使用put和delete提交方式.下面我的解决办法 一. form 只支持post和get两种提交方式,只支持get提交方式 ...

  10. 冥冥中转到了mac 上进行开发

    2013年愚人节前我的开发环境情况 我是一个有着15年windows使用经历的老programer,如果算上dos那还可以加两年.当过小企业网管,做过十二年的开发工作(直到老死,~_~).这期间当然也 ...