queue is especially useful in threaded programming when information must be exchanged safely between multiple threads
queue在使用多进程之间交换安全信息的时候特别有用
class queue.Queue(maxsize=0) #先入先出
class queue.LifoQueue(maxsize=0) #last in fisrt out 
class queue.PriorityQueue(maxsize=0) #存储数据时可设置优先级的队列 优先级最小最先取出
exception queue.Empty 正常情况下当队列为空则阻塞,如果设置了get_nowaait则会报该异常
Exception raised when non-blocking get() (or get_nowait()) is called on a Queue object which is empty.
exception queue.Full 当设置了put_nowait,队列满时报异常

Exception raised when non-blocking put() (or put_nowait()) is called on a Queue object which is full.

Queue.qsize() 查看队列大小
Queue.empty() #return True if empty   队列为空返回True
Queue.full() # return True if full 
Queue.put(itemblock=Truetimeout=None) 上传到队列 正常当Q满了 在put就阻塞 如果timeout为True 则等待多少秒后直接抛异常
Queue.put_nowait(item)# 队列满直接抛异常
Queue.get(block=Truetimeout=None) #上传到队列,队列空了阻塞
Queue.get_nowait() 队列没数据直接抛异常
Queue.task_done() # q.task_done() 在完成一项工作之后,q.task_done() 函数向任务已经完成的队列发送一个信号. 
Queue.join() 实际上意味着等到队列为空,再执行别的操作
  1. #!/usr/bin/env python
  2. # -*- coding:utf-8 -*-
  3. import queue
  4. class Foo(object):
  5. def __init__(self,n):
  6. self.n = n
  7.  
  8. #q = queue.Queue(maxsize=30)
  9. #q = queue.LifoQueue(maxsize=30)
  10. q = queue.PriorityQueue(maxsize=30)
  11. q.put((2,[1,2,3]))
  12. #q.put(Foo(1))
  13. q.put((10,1))
  14. q.put((3,1))
  15. q.put((5,30))
  16. q.task_done()
  17. q.join()
  18. print(q.get())
  19. print(q.get())
  20. print(q.get())
  21. print(q.get())

生产者消费者模型

  1. #!/usr/bin/env python
  2. # -*- coding:utf-8 -*-
  3. import threading,queue
  4. import time
  5.  
  6. def consumer(n):
  7. while True:
  8. print("\033[32;1mconsumer [%s]\033[0m get task: %s" % (n,q.get()))
  9. time.sleep(1)
  10. q.task_done()#每get一次包子,像其他进程告知队列信息
  11. def producer(n):
  12. count = 1
  13. while True:
  14. #time.sleep(1)
  15. #if q.qsize() <3:
  16. print("prodcer [%s] produced a new task : %s" %(n,count))
  17. q.put(count)
  18. count +=1
  19. q.join() #queue is emtpy # 等到队列为空在继续往下执行
  20. print("all taks has been cosumed by consumers...")
  21.  
  22. q = queue.Queue()
  23. c1 = threading.Thread(target=consumer,args=[1,])
  24. c2 = threading.Thread(target=consumer,args=[2,])
  25. c3 = threading.Thread(target=consumer,args=[3,])
  26. p = threading.Thread(target=producer,args=["XiaoYu",])
  27. p2 = threading.Thread(target=producer,args=["LiuYao",])
  28. c1.start()
  29. c2.start()
  30. c3.start()
  31. p.start()
  32. p2.start()

Python Queue队列的更多相关文章

  1. Python -- queue队列模块

    一 简单使用 --内置模块哦 import Queuemyqueue = Queue.Queue(maxsize = 10) Queue.Queue类即是一个队列的同步实现.队列长度可为无限或者有限. ...

  2. Python之路-python(Queue队列、进程、Gevent协程、Select\Poll\Epoll异步IO与事件驱动)

    一.进程: 1.语法 2.进程间通讯 3.进程池 二.Gevent协程 三.Select\Poll\Epoll异步IO与事件驱动 一.进程: 1.语法 简单的启动线程语法 def run(name): ...

  3. Python Queue(队列)

    Queue模块实现了多生产者.多消费者队列.当必须在多个线程之间安全地交换信息时,它在线程编程中特别有用,实现了所有必需的锁定语义. 一.该模块实现了三种类型的队列,它们的区别仅在于检索条目的顺序: ...

  4. 简短而有效的python queue队列解释

    Queue.qsize() 返回队列的大小  Queue.empty() 如果队列为空,返回True,反之False  Queue.full() 如果队列满了,返回True,反之False Queue ...

  5. Python 用队列实现多线程并发

    # Python queue队列,实现并发,在网站多线程推荐最后也一个例子,比这货简单,但是不够规范 # encoding: utf-8 __author__ = 'yeayee.com' # 由本站 ...

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

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

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

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

  8. Python之队列Queue

    今天我们来了解一下python的队列(Queue) queue is especiall useful in threaded programming when information must be ...

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

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

随机推荐

  1. 0050 Linux VIM 命令

    1.  模式切换 vim的模式 $ vi filename 进入normal 模式,这是命令模式,用于执行大多数常用的编辑命令,不能输入 敲i 进入 insert 模式,这是正常的编辑模式,按Esc ...

  2. 类库、委托、is as运算符、泛型集合

    类库: 说白了,就是让别人调用你写的方法,并且不让别人看到你是怎么实现的. 如果有功能你不会做,需要别人帮忙,那么你的同事可以帮你写好一个类,然后你来调用这个类中的方法,完成你的项目. 1.C#源代码 ...

  3. [转]为什么不能用memcached存储Session

    以下内容转自:http://www.infoq.com/cn/news/2015/01/memcached-store-session -------------------------分割线---- ...

  4. varchar类型转换为numeric的值时有问题原因

    numeric的值不应该用单引号括起来...........

  5. CSS3轻松实现清新 Loading 效果

    至今HTML5中国已经为大家分享过几百种基于 CSS3 的Loading加载动画,效果酷炫代码简洁,非常值得学习借鉴;今天就先给大家分享两个常用的CSS3的Loading的案例. 第一种效果: HTM ...

  6. Python的平凡之路(7)

    一.面向对象高级语法部分   1.静态方法.类方法.属性方法                                                                       ...

  7. ios网络学习------4 UIWebView的加载本地数据的三种方式

    ios网络学习------4 UIWebView的加载本地数据的三种方式 分类: IOS2014-06-27 12:56 959人阅读 评论(0) 收藏 举报 UIWebView是IOS内置的浏览器, ...

  8. IIS 工作原理之非托管代码旅程(一)

    IIS6改变 IIS6可以为每个不同的虚拟目录创建不同的程序池,这样缩小了IIS的Application Pool的颗粒度,不同的虚拟目录之间是互不影响的. IIS6(和IIS7经典模式)与IIS7集 ...

  9. HDU 5669 线段树优化建图+分层图最短路

    用线段树维护建图,即把用线段树把每个区间都标号了,Tree1中子节点有到达父节点的单向边,Tree2中父节点有到达子节点的单向边. 每次将源插入Tree1,汇插入Tree2,中间用临时节点相连.那么T ...

  10. Centos搭建SVN服务器三步曲

    搭建SVN服务,有效的管理代码,以下三步可以快速搞定.1.安装 #yum install subversion 判断是否安装成功#subversion -v svnserve, version 1.6 ...