python标准库介绍——32 Queue 模块详解
- Queue 模块
- ``Queue`` 模块提供了一个线程安全的队列 (queue) 实现, 如 [Example 3-2 #eg-3-2] 所示.
- 你可以通过它在多个线程里安全访问同个对象.
- ====Example 3-2. 使用 Queue 模块====[eg-3-2]
- ```
- File: queue-example-1.py
- import threading
- import Queue
- import time, random
- WORKERS = 2
- class Worker(threading.Thread):
- def _ _init_ _(self, queue):
- self._ _queue = queue
- threading.Thread._ _init_ _(self)
- def run(self):
- while 1:
- item = self._ _queue.get()
- if item is None:
- break # reached end of queue
- # pretend we're doing something that takes 10?00 ms
- time.sleep(random.randint(10, 100) / 1000.0)
- print "task", item, "finished"
- #
- # try it
- queue = Queue.Queue(0)
- for i in range(WORKERS):
- Worker(queue).start() # start a worker
- for i in range(10):
- queue.put(i)
- for i in range(WORKERS):
- queue.put(None) # add end-of-queue markers
- *B*task 1 finished
- task 0 finished
- task 3 finished
- task 2 finished
- task 4 finished
- task 5 finished
- task 7 finished
- task 6 finished
- task 9 finished
- task 8 finished*b*
- ```
- [Example 3-3 #eg-3-3] 展示了如何限制队列的大小. 如果队列满了,
- 那么控制主线程 (producer threads) 被阻塞, 等待项目被弹出 (pop off).
- ====Example 3-3. 使用限制大小的 Queue 模块====[eg-3-3]
- ```
- File: queue-example-2.py
- import threading
- import Queue
- import time, random
- WORKERS = 2
- class Worker(threading.Thread):
- def _ _init_ _(self, queue):
- self._ _queue = queue
- threading.Thread._ _init_ _(self)
- def run(self):
- while 1:
- item = self._ _queue.get()
- if item is None:
- break # reached end of queue
- # pretend we're doing something that takes 10?00 ms
- time.sleep(random.randint(10, 100) / 1000.0)
- print "task", item, "finished"
- #
- # run with limited queue
- queue = Queue.Queue(3)
- for i in range(WORKERS):
- Worker(queue).start() # start a worker
- for item in range(10):
- print "push", item
- queue.put(item)
- for i in range(WORKERS):
- queue.put(None) # add end-of-queue markers
- *B*push 0
- push 1
- push 2
- push 3
- push 4
- push 5
- task 0 finished
- push 6
- task 1 finished
- push 7
- task 2 finished
- push 8
- task 3 finished
- push 9
- task 4 finished
- task 6 finished
- task 5 finished
- task 7 finished
- task 9 finished
- task 8 finished*b*
- ```
- 你可以通过继承 //Queue// 类来修改它的行为. [Example 3-4 #eg-3-4]
- 为我们展示了一个简单的具有优先级的队列. 它接受一个元组作为参数,
- 元组的第一个成员表示优先级(数值越小优先级越高).
- ====Example 3-4. 使用 Queue 模块实现优先级队列====[eg-3-4]
- ```
- File: queue-example-3.py
- import Queue
- import bisect
- Empty = Queue.Empty
- class PriorityQueue(Queue.Queue):
- "Thread-safe priority queue"
- def _put(self, item):
- # insert in order
- bisect.insort(self.queue, item)
- #
- # try it
- queue = PriorityQueue(0)
- # add items out of order
- queue.put((20, "second"))
- queue.put((10, "first"))
- queue.put((30, "third"))
- # print queue contents
- try:
- while 1:
- print queue.get_nowait()
- except Empty:
- pass
- *B*third
- second
- first*b*
- ```
- [Example 3-5 #eg-3-5] 展示了一个简单的堆栈 (stack) 实现
- (末尾添加, 头部弹出, 而非头部添加, 头部弹出).
- ====Example 3-5. 使用 Queue 模块实现一个堆栈====[eg-3-5]
- ```
- File: queue-example-4.py
- import Queue
- Empty = Queue.Empty
- class Stack(Queue.Queue):
- "Thread-safe stack"
- def _put(self, item):
- # insert at the beginning of queue, not at the end
- self.queue.insert(0, item)
- # method aliases
- push = Queue.Queue.put
- pop = Queue.Queue.get
- pop_nowait = Queue.Queue.get_nowait
- #
- # try it
- stack = Stack(0)
- # push items on stack
- stack.push("first")
- stack.push("second")
- stack.push("third")
- # print stack contents
- try:
- while 1:
- print stack.pop_nowait()
- except Empty:
- pass
- *B*third
- second
- first*b*
- ```
python标准库介绍——32 Queue 模块详解的更多相关文章
- python标准库介绍——27 random 模块详解
==random 模块== "Anyone who considers arithmetical methods of producing random digits is, of cour ...
- python标准库介绍——12 time 模块详解
==time 模块== ``time`` 模块提供了一些处理日期和一天内时间的函数. 它是建立在 C 运行时库的简单封装. 给定的日期和时间可以被表示为浮点型(从参考时间, 通常是 1970.1.1 ...
- python标准库介绍——10 sys 模块详解
==sys 模块== ``sys`` 模块提供了许多函数和变量来处理 Python 运行时环境的不同部分. === 处理命令行参数=== 在解释器启动后, ``argv`` 列表包含了传递给脚本的所有 ...
- python标准库介绍——30 code 模块详解
==code 模块== ``code`` 模块提供了一些用于模拟标准交互解释器行为的函数. ``compile_command`` 与内建 ``compile`` 函数行为相似, 但它会通过测试来保证 ...
- python标准库介绍——8 operator 模块详解
==operator 模块== ``operator`` 模块为 Python 提供了一个 "功能性" 的标准操作符接口. 当使用 ``map`` 以及 ``filter`` 一类 ...
- python标准库介绍——36 popen2 模块详解
==popen2 模块== ``popen2`` 模块允许你执行外部命令, 并通过流来分别访问它的 ``stdin`` 和 ``stdout`` ( 可能还有 ``stderr`` ). 在 pyth ...
- python标准库介绍——23 UserString 模块详解
==UserString 模块== (2.0 新增) ``UserString`` 模块包含两个类, //UserString// 和 //MutableString// . 前者是对标准字符串类型的 ...
- python标准库介绍——22 UserList 模块详解
==UserList 模块== ``UserList`` 模块包含了一个可继承的列表类 (事实上是对内建列表类型的 Python 封装). 在 [Example 2-16 #eg-2-16] 中, / ...
- python标准库介绍——21 UserDict 模块详解
==UserDict 模块== ``UserDict`` 模块包含了一个可继承的字典类 (事实上是对内建字典类型的 Python 封装). [Example 2-15 #eg-2-15] 展示了一个增 ...
随机推荐
- MDX Step by Step 读书笔记(九) - Working with Time 处理时间
开篇介绍 这一章节主要用到的 MDX 函数: PeriodsToDate( [Level , [Member]] ) - 从指定级别的范围内,返回与指定成员同一级别,从第一个期间开始到指定成员结束的期 ...
- windows 2012授权模型
转自:http://www.aidanfinn.com/?p=13090 Remember that Microsoft licenses its servers at the physical le ...
- C++ 第八课 标准c字符和字符串
atof() 将字符串转换成浮点数 atoi() 将字符串转换成整数 atol() 将字符串转换成长整型数 isalnum() 当字母或数字字符时, 返回真值 isalpha() 当字母字符时, 返回 ...
- LNMP一键安装包-CentOS/Ubuntu/Debian自动安装Nginx,MySQL,PHP
适用环境: 系统支持:CentOS.Ubuntu.Debian 内存要求:≥128M 安装了什么: 1.Nginx-1.2.1 2.MySQL 5.5.25 3.PHP 5.2.17或PHP 5.3. ...
- 【BZOJ2631】tree
Description 一棵n个点的树.每一个点的初始权值为1. 对于这棵树有q个操作,每一个操作为下面四种操作之中的一个: + u v c:将u到v的路径上的点的权值都加上自然数c: - u1 v1 ...
- 用户从输入URL到看到网页发生了什么?
一.在浏览器地址栏输入URL 二.浏览器查看缓存1.如果资源未缓存,发起新请求如果已缓存,检验是否处于有效期,资源处于有效期内直接提供给客户端,否则与服务器进行验证.2.检验有效期通常有两个HTTP头 ...
- Run Test Case on Spark
今天有哥们问到怎样对Spark进行单元測试.如今将Sbt的測试方法写出来,例如以下: 对Spark的test case进行測试的时候能够用sbt的test命令: 一.測试所有t ...
- 通过 Apache Commons HttpClient 发送 HTTPS 请求
1.通过 HTTPS 发送 POST 请求: 2.HTTPS 安全协议采用 TLSv1.2: 3. 使用代理(Proxy)进行 HTTPS 访问: 4.指定 Content-Type 为:applic ...
- Java泛型的PECS原则
1.什么是PESC ? PESC = producer-extens , consumer -super. 如果参数化类型表示一个 T 生产者,就使用 <? extends T>: 如果 ...
- great tips in soapui
from this site :http://onebyteatatime.wordpress.com/2009/04/18/soapui-tips-n-tricks-part-2/