Python Queue队列
- 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()
(orget_nowait()
) is called on aQueue
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
(item, block=True, timeout=None) 上传到队列 正常当Q满了 在put就阻塞 如果timeout为True 则等待多少秒后直接抛异常
Queue.
put_nowait
(item)# 队列满直接抛异常Queue.
get
(block=True, timeout=None) #上传到队列,队列空了阻塞Queue.
get_nowait
() 队列没数据直接抛异常Queue.
task_done
() # q.task_done() 在完成一项工作之后,q.task_done() 函数向任务已经完成的队列发送一个信号.Queue.
join
() 实际上意味着等到队列为空,再执行别的操作
- #!/usr/bin/env python
- # -*- coding:utf-8 -*-
- import queue
- class Foo(object):
- def __init__(self,n):
- self.n = n
- #q = queue.Queue(maxsize=30)
- #q = queue.LifoQueue(maxsize=30)
- q = queue.PriorityQueue(maxsize=30)
- q.put((2,[1,2,3]))
- #q.put(Foo(1))
- q.put((10,1))
- q.put((3,1))
- q.put((5,30))
- q.task_done()
- q.join()
- print(q.get())
- print(q.get())
- print(q.get())
- print(q.get())
生产者消费者模型
- #!/usr/bin/env python
- # -*- coding:utf-8 -*-
- import threading,queue
- import time
- def consumer(n):
- while True:
- print("\033[32;1mconsumer [%s]\033[0m get task: %s" % (n,q.get()))
- time.sleep(1)
- q.task_done()#每get一次包子,像其他进程告知队列信息
- def producer(n):
- count = 1
- while True:
- #time.sleep(1)
- #if q.qsize() <3:
- print("prodcer [%s] produced a new task : %s" %(n,count))
- q.put(count)
- count +=1
- q.join() #queue is emtpy # 等到队列为空在继续往下执行
- print("all taks has been cosumed by consumers...")
- q = queue.Queue()
- c1 = threading.Thread(target=consumer,args=[1,])
- c2 = threading.Thread(target=consumer,args=[2,])
- c3 = threading.Thread(target=consumer,args=[3,])
- p = threading.Thread(target=producer,args=["XiaoYu",])
- p2 = threading.Thread(target=producer,args=["LiuYao",])
- c1.start()
- c2.start()
- c3.start()
- p.start()
- p2.start()
Python Queue队列的更多相关文章
- Python -- queue队列模块
一 简单使用 --内置模块哦 import Queuemyqueue = Queue.Queue(maxsize = 10) Queue.Queue类即是一个队列的同步实现.队列长度可为无限或者有限. ...
- Python之路-python(Queue队列、进程、Gevent协程、Select\Poll\Epoll异步IO与事件驱动)
一.进程: 1.语法 2.进程间通讯 3.进程池 二.Gevent协程 三.Select\Poll\Epoll异步IO与事件驱动 一.进程: 1.语法 简单的启动线程语法 def run(name): ...
- Python Queue(队列)
Queue模块实现了多生产者.多消费者队列.当必须在多个线程之间安全地交换信息时,它在线程编程中特别有用,实现了所有必需的锁定语义. 一.该模块实现了三种类型的队列,它们的区别仅在于检索条目的顺序: ...
- 简短而有效的python queue队列解释
Queue.qsize() 返回队列的大小 Queue.empty() 如果队列为空,返回True,反之False Queue.full() 如果队列满了,返回True,反之False Queue ...
- Python 用队列实现多线程并发
# Python queue队列,实现并发,在网站多线程推荐最后也一个例子,比这货简单,但是不够规范 # encoding: utf-8 __author__ = 'yeayee.com' # 由本站 ...
- Python自动化运维之16、线程、进程、协程、queue队列
一.线程 1.什么是线程 线程是操作系统能够进行运算调度的最小单位.它被包含在进程之中,是进程中的实际运作单位. 一条线程指的是进程中一个单一顺序的控制流,一个进程中可以并发多个线程,每条线程并行执行 ...
- Python第十五天 datetime模块 time模块 thread模块 threading模块 Queue队列模块 multiprocessing模块 paramiko模块 fabric模块
Python第十五天 datetime模块 time模块 thread模块 threading模块 Queue队列模块 multiprocessing模块 paramiko模块 fab ...
- Python之队列Queue
今天我们来了解一下python的队列(Queue) queue is especiall useful in threaded programming when information must be ...
- python threading模块使用 以及python多线程操作的实践(使用Queue队列模块)
今天花了近乎一天的时间研究python关于多线程的问题,查看了大量源码 自己也实践了一个生产消费者模型,所以把一天的收获总结一下. 由于GIL(Global Interpreter Lock)锁的关系 ...
随机推荐
- ToolStrip添加自定义的DateTimePicker
直接新建一个类,代码如下: [ToolStripItemDesignerAvailability(ToolStripItemDesignerAvailability.All), DefaultEven ...
- [kylin] 部署kylin服务
一.工具准备 zookeeper3.4.6 (hadoop.hbase 管理工具) Hadoop. Hbase1.1.4 Kylin1.5.0-HBase1.1.3 Jdk1.7.80 Hive 二. ...
- 作业3---for语句及分支结构else-if
1.本次课学习到的知识点: (1)for语句的一般表达式,执行顺序: (2)指定次序的循环程序设计:数列的累加.累乘等: (3)else-if实现的分支结构可以判断语句的真假 2.实验过程中遇到的问题 ...
- [Android] Web Console: Uncaught TypeError: Object [object Object] has no method 'xxx'
我们开发的产品,有一部分功能,需要在WebView中打开web页面,然后在web页面中通过js方法回调部分native的功能. 对于web回调native的开发方式,如果不了解的话,可以参考我以前的一 ...
- 使用ASP.NET 上传文件 三种类型判断方法(后缀,MIME,数据流)
#region 一. 安全性比较低,把文本文件1.txt改成1.jpg照样可以上传,但其实现方法容易理解,实现也简单,所以网上很多还是采取这种方法. Boolean fileOk = false; s ...
- iOS开发Swift篇—(七)函数(1)
iOS开发Swift篇—(七)函数 一.函数的定义 (1)函数的定义格式 func 函数名(形参列表) -> 返回值类型 { // 函数体... } (2)形参列表的格式 形参名1: 形参类型1 ...
- Android Studio插件推荐(PreIOC,GsonFormat)
好的插件能加快项目的开发速度,尤其是一些针对重复性的代码的插件,所以在这里向大家推荐2款不错的插件,如果以后发现新的好的插件,还会继续推荐,同时欢迎大家推荐 GsonFormat GsonFormat ...
- ubuntu下minicom和USB转串口(转)
ubuntu下minicom和USB转串口(转) minicom是linux下串口通信的软件,它的使用完全依靠键盘的操作,虽然没有“超级终端”那么易用,但是使用习惯之后读者将会体会到它的高效与便利 ...
- <1 小玩意(覆盖效果)
<!DOCTYPE html> <html lang="zh-cn"> <head> <meta charset="utf-8& ...
- Linux定时器相关源码分析
Linux的定时器使用时间轮算法.数据结构不难理解,核心数据结构与散列表及其相似,甚至可以说,就是散列表.事实上,理解其散列表的本质,有助于对相关操作的理解. 数据结构 这里先列出一些宏,稍后解释: ...