创建一个“队列”对象

import Queue

myqueue = Queue.Queue(maxsize = 10)

Queue.Queue类即是一个队列的同步实现。队列长度可为无限或者有限。可通过Queue的构造函数的可选参数maxsize来设定队列长度。如果maxsize小于1就表示队列长度无限。

将一个值放入队列中

myqueue.put(10)

调用队列对象的put()方法在队尾插入一个项目。put()有两个参数,第一个item为必需的,为插入项目的值;第二个block为可选参数,默认为1。如果队列当前为空且block为1,put()方法就使调用线程暂停,直到空出一个数据单元。如果block为0,put方法将引发Full异常。

将一个值从队列中取出

myqueue.get()

调用队列对象的get()方法从队头删除并返回一个项目。可选参数为block,默认为True。如果队列为空且block为True,get()就使调用线程暂停,直至有项目可用。如果队列为空且block为False,队列将引发Empty异常。

python queue模块有三种队列:

1、python queue模块的FIFO队列先进先出。

2、LIFO类似于堆。即先进后出。

3、还有一种是优先级队列级别越低越先出来。

针对这三种队列分别有三个构造函数:

1、class Queue.Queue(maxsize) FIFO

2、class Queue.LifoQueue(maxsize) LIFO

3、class Queue.PriorityQueue(maxsize) 优先级队列

介绍一下此包中的常用方法:

Queue.qsize() 返回队列的大小

Queue.empty() 如果队列为空,返回True,反之False

Queue.full() 如果队列满了,返回True,反之False

Queue.full 与 maxsize 大小对应

Queue.get([block[, timeout]])获取队列,timeout等待时间

Queue.get_nowait() 相当Queue.get(False)

非阻塞 Queue.put(item) 写入队列,timeout等待时间

Queue.put_nowait(item) 相当Queue.put(item, False)

Queue.task_done() 在完成一项工作之后,Queue.task_done()函数向任务已经完成的队列发送一个信号

Queue.join() 实际上意味着等到队列为空,再执行别的操作

附上一个例子:

#coding:utf-8

import Queue

import threading

import time

import random

q = Queue.Queue(0) #当有多个线程共享一个东西的时候就可以用它了

NUM_WORKERS = 3

class MyThread(threading.Thread):

def __init__(self,input,worktype):

self._jobq = input

self._work_type = worktype

threading.Thread.__init__(self)

def run(self):

while True:

if self._jobq.qsize() > 0:

self._process_job(self._jobq.get(),self._work_type)

else:break

def _process_job(self, job, worktype):

doJob(job,worktype)

def doJob(job, worktype):

time.sleep(random.random() * 3)

print"doing",job," worktype ",worktype

if __name__ == '__main__':

print "begin...."

for i inrange(NUM_WORKERS * 2):

q.put(i) #放入到任务队列中去

print "job qsize:",q.qsize()

for x inrange(NUM_WORKERS):

MyThread(q,x).start()一些需要注意的地方:

1. 阻塞模式

importQueue

q = Queue.Queue(10)

......

fori in range(10):

q.put('A')

time.sleep(0.5)

这是一段极其简单的代码(另有两个线程也在操作队列q),我期望每隔0.5秒写一个'A'到队列中,但总是不能如愿:间隔时间有时会远远超过0.5秒。原来,Queue.put()默认有 block = True 和 timeou 两个参数。当  block = True 时,写入是阻塞式的,阻塞时间由 timeou  确定。当队列q被(其他线程)写满后,这段代码就会阻塞,直至其他线程取走数据。Queue.put()方法加上 block=False 的参数,即可解决这个隐蔽的问题。但要注意,非阻塞方式写队列,当队列满时会抛出 exception Queue.Full 的异常。

2. 无法捕获 exception Queue.Empty 的异常

whileTrue:

......

try:

data = q.get()

exceptQueue.Empty:

break

我的本意是用队列为空时,退出循环,但实际运行起来,却陷入了死循环。这个问题和上面有点类似:Queue.get()默认的也是阻塞方式读取数据,队列为空时,不会抛出 except Queue.Empty ,而是进入阻塞直至超时。 加上block=False 的参数,问题迎刃而解。

python queue windows_python Queue模块相关推荐

  1. Python标准库queue模块原理浅析

    Python标准库queue模块原理浅析 本文环境python3.5.2 queue模块的实现思路 作为一个线程安全的队列模块,该模块提供了线程安全的一个队列,该队列底层的实现基于Python线程th ...

  2. python queue函数_Python模块:queue

    一.Python queue Python queue模块有三种队列: 1.FIFO队列先进先出. 2.LIFO类似于堆,即先进后出. 3.还有一种是优先级队列级别越低越先出来. 针对这三种队列分别有 ...

  3. Py之Queue:python库之Queue的简介、安装、使用方法之详细攻略

    Py之Queue:python库之Queue的简介.安装.使用方法之详细攻略 目录 Queue的简介 Queue的安装 Queue的使用方法 1.queue模块有三种队列及构造函数 Queue的简介 ...

  4. python 中的queue, deque

    python3 deque(双向队列) 创建双向队列 import collections d = collections.deque() append(往右边添加一个元素) import colle ...

  5. Python 线程队列 Queue – FIFO - Python零基础入门教程

    目录 一.Python 线程队列分类 二.Python 线程先进先出队列 Queue 简介 三.Python 线程先进先出队列 Queue 常用函数 四.Python 线程先进先出队列 Queue 使 ...

  6. 中华英才网爬虫程序(3)-queue和threading模块的结合使用

    欢迎来到爬虫高级兼实战教程,打开你的IDE,开始python之旅吧! queue模块 threading模块其实还不够快.为什么呢?我们只能平均分配网址来分发给多个线程,但是线程的速度也有快慢,如果有 ...

  7. python中的Queue

    queue简介 Python的Queue模块提供一种适用于多线程编程的FIFO实现.它可用于在生产者(producer)和消费者(consumer)之间线程安全(thread-safe)地传递消息或其 ...

  8. python gevent queue_gevent.queue

    Gevent gevent基础之阻塞,非阻塞 1.gevent中一个很大的改进就是将阻塞IO改为非阻塞IO: 阻塞调用是指调用结果返回之前,当前线程会被挂起.函数只有在得到结果之后才会返回 非阻塞指在 ...

  9. 《Python全栈开发:Python 队列(queue)》

    一.Python 队列(queue) Python的Queue模块中提供了同步的.线程安全的队列类,包括FIFO(先入先出)队列Queue,LIFO(后入先出)队列LifoQueue,和优先级队列Pr ...

最新文章

  1. 方舟服务器显示队友位置,方舟如何看队友在哪 | 手游网游页游攻略大全
  2. Python爬虫(二)_urllib2的使用
  3. JavaWeb:过滤器Filter
  4. vue前期知识点笔记
  5. 下载Centos7 64位镜像
  6. Redis的AOF日志
  7. 千兆交换机下面可以接多少层交换机_视频监控系统如何选择网络交换机
  8. LInux下centos6.7 设置字符集,解决乱码问题
  9. 手机电量剩一半就充比较好,还是快没电了再充比较好?为什么?
  10. 网页优化系列三:使用压缩后置viewstate
  11. 01 ZooKeeper初探
  12. 计蒜客 16876 韩梅梅的抽象画
  13. 实现WP7下ListBox分页加载接口
  14. 图形界面编程成就了C++
  15. python拟合二元一次函数
  16. surface pro4应用软件安装
  17. MQTT服务器Mosquitto的使用及配置过程中的一些问题和解决方法
  18. 受够了百度网盘?如何注册无限容量的Google Drive网盘
  19. 自行车小组问卷调查报告
  20. 国际信用卡如何支付(流程演示图)

热门文章

  1. Ray集群搭建 Python Demo
  2. php http 类,php写的http请求封装类
  3. android最新设计规范,Android应用未来的设计规范
  4. css如何插入动态图,css动态图(作业)
  5. python中config命令_【Python】 配置解析ConfigParser 命令行参数解析optparser
  6. 搜狗浏览器怎么保存账号密码 搜狗浏览器保存账号密码教程
  7. 谷歌浏览器怎么打开flash Chrome启用flash插件技巧分享
  8. Oracle数据库,当DML操作时执行触发器记录日志
  9. iis7.5 php伪静态,Windows Server 2008 下WordPress IIS7.5伪静态规则设置(最新)
  10. 新版Elemen Plus 国际化 1.0.2-beta.59(包含59)