Queue模块解决了生产者、消费者问题,在多线程编程中进行线程通信的时候尤其有用,Queue类封装了加锁解锁的过程。

        在Queue模块中有三种不同的队列类,区别是不同队列取出数据的顺序不同。在FIFO队列中,先存进去的数据最先取出来。而在LIFO队列中,最后存进去的数据最取出来。在加权队列中,权值最小的先取出来。
        Queue(maxsize=0)类
        构造一个先进先出FIFO的队列,maxsize是个整数,指定了队列中最多能够存入的数据个数,如果达到最大数目,将不能再进行插入操作,如果maxsize小于等于0,则对插入的数目没有限制。
        LifeQueue(maxsize)类
        构造一个后进先出LIFO的队列。其他跟Queue类一样。
        PriorityQueue(maxsize)类
        加权队列,权值最小的值最先取出。插入的数据格式应该为(priority_number, data)
        此外,Queue模块还定义了两个异常类。
        Empty
        当队列为空却执行get()操作时,将抛出这个异常。
        Full
        当队列满了,却执行put()操作时将抛出这个异常。
        注意:collections模块中的deque是不带加锁解锁功能的。

Queue对象

Queue对象定义了以下公共方法。

qsize():返回队列的大小。

empty():判断队列是否为空。

  full():判断队列是否满了。

  put(item[,block[,timeout]]):插入元素到队列,如果可选参数block为True,并且timeout为None(默认值),将等待队列中有空闲位置,如果timetout为一个正整数,将最多等待timeout秒,然后抛出Full异常。如果Block为False,在队列中有空余位置时直接执行插入操作,如果没有则抛出异常。

put_nowait(item):相当于put(item,False)

get([block[,timeout]]):从队列中取出一个元素,如果可选参数block为True,并起timeout为None,如果队列为空将等待直到队列中不为空,如果timeout为一个正整数,则只会等待最多timeout秒,然后抛出Empty异常。如果block为False,如果队列非空将直接返回元素,如果为空则抛出异常。

  get_nowait():相当于get(False)

  join():等待队列中所有的元素被取出并执行。

task_done():当前一个从队列中取出的任务执行完毕之后,通过这个方法告诉队列操作已经执行完毕。

例如下面的例子:

  1.  def worker():
    while True:
    item = q.get()
    do_work(item)
    q.task_done() q = Queue()
    for i in range(num_worker_threads):
    t = Thread(target=worker)
    t.daemon = True
    t.start() for item in source():
    q.put(item) q.join() # block until all tasks are done

同步队列-Queue模块解析的更多相关文章

  1. Python 单向队列Queue模块详解

    Python 单向队列Queue模块详解 单向队列Queue,先进先出 '''A multi-producer, multi-consumer queue.''' try: import thread ...

  2. Python之队列queue模块使用 常见问题与用法

    python 中,队列是线程间最常用的交换数据的形式.queue模块是提供队列操作的模块,虽然简单易用,但是不小心的话,还是会出现一些意外. 1. 阻塞模式 import queue q = queu ...

  3. Python队列queue模块

    Python中queue模块常用来处理队列相关问题 队列常用于生产者消费者模型,主要功能为提高效率和程序解耦 1. queue模块的基本使用和相关说明 # -*- coding:utf-8 -*- # ...

  4. Python 双向队列Deque、单向队列Queue 模块使用详解

    Python 双向队列Deque 模块使用详解 创建双向队列Deque序列 双向队列Deque提供了类似list的操作方法: #!/usr/bin/python3 import collections ...

  5. python多线程以及同步队列(转)

    转自:http://www.w3cschool.cc/python/python-multithreading.html 多线程类似于同时执行多个不同程序,多线程运行有如下优点: 使用线程可以把占据长 ...

  6. Python进阶【第二篇】多线程、消息队列queue

    1.Python多线程.多进程 目的提高并发 1.一个应用程序,可以有多进程和多线程 2.默认:单进程,单线程 3.单进程,多线程 IO操作,不占用CPU python的多线程:IO操作,多线程提供并 ...

  7. Python进阶----异步同步,阻塞非阻塞,线程池(进程池)的异步+回调机制实行并发, 线程队列(Queue, LifoQueue,PriorityQueue), 事件Event,线程的三个状态(就绪,挂起,运行) ,***协程概念,yield模拟并发(有缺陷),Greenlet模块(手动切换),Gevent(协程并发)

    Python进阶----异步同步,阻塞非阻塞,线程池(进程池)的异步+回调机制实行并发, 线程队列(Queue, LifoQueue,PriorityQueue), 事件Event,线程的三个状态(就 ...

  8. python笔记9 线程进程 threading多线程模块 GIL锁 multiprocessing多进程模块 同步锁Lock 队列queue IO模型

    线程与进程 进程 进程就是一个程序在一个数据集上的一次动态执行过程.进程一般由程序.数据集.进程控制块三部分组成.我们编写的程序用来描述进程要完成哪些功能以及如何完成:数据集则是程序在执行过程中所需要 ...

  9. threading模块和queue模块实现程序并发功能和消息队列

    简介: 通过三个例子熟悉一下python threading模块和queue模块实现程序并发功能和消息队列. 说明:以下实验基于python2.6 基本概念 什么是进程? 拥有独立的地址空间,内存,数 ...

随机推荐

  1. 幸运大转盘-jQuery+PHP实现的抽奖程序

    目前好多网站上应用的转盘抽奖程序大多是基于flash的,而本文结合实例将使用jQuery和PHP来实现转盘抽奖程序,为了便于理解,作者分两部分来讲解,本文讲解第一部分,侧重使用jQuery实现转盘的转 ...

  2. asp.net RadioButton控件基础

    RadioButton按钮呢,必须要设置groupname属性的值才能将多个RadioButton按钮设置为单选按钮,当AutoPostBack="true"的时候,在change ...

  3. css黑魔法

    多行文本溢出显示省略号(...)的方法 p { overflow : hidden; text-overflow: ellipsis; display: -webkit-box; -webkit-li ...

  4. Javascript基础示例:用JS写简易版贪吃蛇(面向对象)

    废话不多说,代码如下: <!DOCTYPE html> <html> <head> <meta charset="UTF-8"> & ...

  5. [原创]反汇编之一:和Taskmgr过不去篇(无厘头版)

    原文链接:和Taskmgr过不去篇(无厘头版) Hook入门级文章,主要想培养一下偶写文章的感觉,老鸟无视…我想看看技术文章能不能无厘头的写,如果效果不错的话,准备更上一层-----用我的原创漫画表达 ...

  6. C语言Printf格式

    使用printf打印时发现,如果数据类型和打印使用的类型不一致,结果就是混乱的. 这是因为printf本身并不进行数据的类型转换,他只是把输入按照给定的数据格式输出,如果二者不匹配,那么由于不同数据类 ...

  7. SQL Server 向堆表中插入数据的过程

    堆表中  IAM 记录着的数据页,表的各个数据页之间没有联系.也就是说一个页面它不会知道自己的前一页是谁,也不知道自己的后一页是谁. 插入数据时先找到IAM页,再由pfs(page free spac ...

  8. poj2105---用指针对数组分块操作

    #include <stdio.h> #include <stdlib.h> ; int pow1(int a,int b) { ,i; ) ; ;i<b;i++) { ...

  9. Day3_字符串操作与正则表达式

    本节课的主要内容有:字符串的格式化.连接与分割.比较.匹配和替换.使用正则表达式 字符串的格式化: 去除空格:trim() 使用html格式化:nl2br()  替换‘\n’为‘<br /> ...

  10. configure mount nfs

    qemu-img convert -f raw -O qcow2 nix.img ruiynix.qcow2 1,yum createrepo