python queue windows_python Queue模块
创建一个“队列”对象
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模块相关推荐
- Python标准库queue模块原理浅析
Python标准库queue模块原理浅析 本文环境python3.5.2 queue模块的实现思路 作为一个线程安全的队列模块,该模块提供了线程安全的一个队列,该队列底层的实现基于Python线程th ...
- python queue函数_Python模块:queue
一.Python queue Python queue模块有三种队列: 1.FIFO队列先进先出. 2.LIFO类似于堆,即先进后出. 3.还有一种是优先级队列级别越低越先出来. 针对这三种队列分别有 ...
- Py之Queue:python库之Queue的简介、安装、使用方法之详细攻略
Py之Queue:python库之Queue的简介.安装.使用方法之详细攻略 目录 Queue的简介 Queue的安装 Queue的使用方法 1.queue模块有三种队列及构造函数 Queue的简介 ...
- python 中的queue, deque
python3 deque(双向队列) 创建双向队列 import collections d = collections.deque() append(往右边添加一个元素) import colle ...
- Python 线程队列 Queue – FIFO - Python零基础入门教程
目录 一.Python 线程队列分类 二.Python 线程先进先出队列 Queue 简介 三.Python 线程先进先出队列 Queue 常用函数 四.Python 线程先进先出队列 Queue 使 ...
- 中华英才网爬虫程序(3)-queue和threading模块的结合使用
欢迎来到爬虫高级兼实战教程,打开你的IDE,开始python之旅吧! queue模块 threading模块其实还不够快.为什么呢?我们只能平均分配网址来分发给多个线程,但是线程的速度也有快慢,如果有 ...
- python中的Queue
queue简介 Python的Queue模块提供一种适用于多线程编程的FIFO实现.它可用于在生产者(producer)和消费者(consumer)之间线程安全(thread-safe)地传递消息或其 ...
- python gevent queue_gevent.queue
Gevent gevent基础之阻塞,非阻塞 1.gevent中一个很大的改进就是将阻塞IO改为非阻塞IO: 阻塞调用是指调用结果返回之前,当前线程会被挂起.函数只有在得到结果之后才会返回 非阻塞指在 ...
- 《Python全栈开发:Python 队列(queue)》
一.Python 队列(queue) Python的Queue模块中提供了同步的.线程安全的队列类,包括FIFO(先入先出)队列Queue,LIFO(后入先出)队列LifoQueue,和优先级队列Pr ...
最新文章
- 方舟服务器显示队友位置,方舟如何看队友在哪 | 手游网游页游攻略大全
- Python爬虫(二)_urllib2的使用
- JavaWeb:过滤器Filter
- vue前期知识点笔记
- 下载Centos7 64位镜像
- Redis的AOF日志
- 千兆交换机下面可以接多少层交换机_视频监控系统如何选择网络交换机
- LInux下centos6.7 设置字符集,解决乱码问题
- 手机电量剩一半就充比较好,还是快没电了再充比较好?为什么?
- 网页优化系列三:使用压缩后置viewstate
- 01 ZooKeeper初探
- 计蒜客 16876 韩梅梅的抽象画
- 实现WP7下ListBox分页加载接口
- 图形界面编程成就了C++
- python拟合二元一次函数
- surface pro4应用软件安装
- MQTT服务器Mosquitto的使用及配置过程中的一些问题和解决方法
- 受够了百度网盘?如何注册无限容量的Google Drive网盘
- 自行车小组问卷调查报告
- 国际信用卡如何支付(流程演示图)
热门文章
- Ray集群搭建 Python Demo
- php http 类,php写的http请求封装类
- android最新设计规范,Android应用未来的设计规范
- css如何插入动态图,css动态图(作业)
- python中config命令_【Python】 配置解析ConfigParser 命令行参数解析optparser
- 搜狗浏览器怎么保存账号密码 搜狗浏览器保存账号密码教程
- 谷歌浏览器怎么打开flash Chrome启用flash插件技巧分享
- Oracle数据库,当DML操作时执行触发器记录日志
- iis7.5 php伪静态,Windows Server 2008 下WordPress IIS7.5伪静态规则设置(最新)
- 新版Elemen Plus 国际化 1.0.2-beta.59(包含59)