非常教程

Python参考手册

数据类型 | Data Types

Queue

注释

Queue模块已被重命名为queuePython 3. 当将源代码转换为Python 3时,2to3工具将自动适应导入。

源代码: Lib / Queue.py

Queue模块实现了多生产者,多用户队列。当信息必须在多个线程之间安全地交换时,它在线程编程中特别有用。该Queue模块中的类实现了所有必需的锁定语义。这取决于Python中线程支持的可用性; 看threading模块。

该模块实现三种类型的队列,它们仅在检索条目的顺序上有所不同。在FIFO队列中,添加的第一个任务是第一个检索的。在LIFO队列中,最近添加的条目是第一个检索到的(像堆栈一样操作)。使用优先级队列,条目保持排序(使用heapq模块),并且首先检索最低值的条目。

Queue模块定义了以下类和例外:

class Queue.Queue(maxsize=0)

FIFO队列的构造器。maxsize是一个整数,用于设置可以放入队列中的项目数的上限。一旦达到此大小,插入将会阻塞,直到消耗队列项目。如果maxsize小于或等于零,则队列大小是无限的。

class Queue.LifoQueue(maxsize=0)

LIFO队列的构造器。maxsize是一个整数,用于设置可以放入队列中的项目数的上限。一旦达到此大小,插入将会阻塞,直到消耗队列项目。如果maxsize小于或等于零,则队列大小是无限的。

2.6版本中的新功能。

class Queue.PriorityQueue(maxsize=0)

优先队列的构造函数。maxsize是一个整数,用于设置可以放入队列中的项目数的上限。一旦达到此大小,插入将会阻塞,直到消耗队列项目。如果maxsize小于或等于零,则队列大小是无限的。

最低值的条目首先被检索(最低值的条目是返回的条目sorted(list(entries))[0])。条目的典型模式是以下形式的元组:(priority_number, data)

2.6版本中的新功能。

exception Queue.Empty

在空对象上调用非阻塞get()(或get_nowait())时引发异常Queue

exception Queue.Full

在对象已满时调用非阻塞put()(或put_nowait())时引发异常Queue

1.队列对象

队列对象(QueueLifoQueuePriorityQueue)提供下面描述的公共方法。

Queue.qsize()

返回队列的近似大小。请注意,qsize()> 0并不保证后续的get()不会被阻塞,也不会保证put()不会阻塞qsize()<maxsize。

Queue.empty()

True如果队列为空False则返回,否则返回。如果empty()返回True它并不能保证后续的put()调用不会被阻塞。同样,如果empty()返回False它并不能保证后续调用get()不会被阻塞。

Queue.full()

True如果队列已满False则返回,否则返回。如果full()返回True它并不能保证后续调用get()不会被阻塞。同样,如果full()返回False它并不能保证后续调用put()不会被阻塞。

Queue.put(item[, block[, timeout]])

项目放入队列中。如果可选参数为真并且超时None(默认),则在需要时禁止,直到有空闲插槽可用。如果超时是一个正数,它会阻止至多超时秒数,并Full在该时间内没有空闲插槽时引发异常。否则(为假),如果空闲插槽立即可用,则在队列中放置一个项目,否则引发Full异常(在这种情况下超时被忽略)。

2.3版本中的新功能:超时参数。

Queue.put_nowait(item)

相当于put(item, False)

Queue.get([block[, timeout]])

从队列中移除并返回一个项目。如果可选的参数为true并且超时None(默认),则在必要时阻塞,直到项目可用。如果超时时间为正数,则最多会阻止超时秒数,Empty如果在该时间内没有可用项目,则会引发异常。否则(block为false),如果一个立即可用,则返回一个项目,否则引发Empty异常(在这种情况下超时被忽略)。

2.3版本中的新功能:超时参数。

Queue.get_nowait()

相当于get(False)

提供了两种方法来支持跟踪入队任务是否已完全由守护进程消费者线程处理。

Queue.task_done()

表明以前排队的任务已完成。由队列消费者线程使用。对于每个get()用于获取任务的对象,后续调用会task_done()告知队列该任务的处理已完成。

如果join()当前处于阻塞状态,则在所有项目都处理完毕后(即task_done()接收到已put()进入队列的每个项目的呼叫),它将恢复。

提出了一个ValueError好象叫更多的时间比中放入队列中的项目。

2.5版本中的新功能。

Queue.join()

阻塞,直到队列中的所有项目都被获取并处理。

每当将项目添加到队列中时,未完成任务的数量就会增加。无论何时消费者线程调用task_done()以指示该项目已被检索并且所有工作都已完成,计数就会减少。当未完成任务的计数降至零时,join()取消阻止。

2.5版本中的新功能。

如何等待入队任务完成的示例:

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
Python

Python 是一种面向对象的解释型计算机程序设计语言,由荷兰人 Guido van Rossum 于1989年发明,第一个公开发行版发行于1991年。 Python 是纯粹的自由软件, 源代码和解释器 CPython 遵循 GPL 协议。Python 语法简洁清晰,特色之一是强制用空白符( white space )作为语句缩进。

主页 https://www.python.org/
源码 https://github.com/python/cpython
版本 2.7
发布版本 2.7.13

Python目录

1.内置常量 | Built-in Constants
2.内置例外 | Built-in Exceptions
3.内置函数 | Built-in Functions
4.内置类型 | Built-in Types
5.编译器 | Compiler
6.加密 | Cryptography
7.数据压缩 | Data Compression
8.数据持久性 | Data Persistence
9.数据类型 | Data Types
10.调试和分析 | Debugging & Profiling
11.开发工具 | Development Tools
12.文件和目录访问 | File & Directory Access
13.文件格式 | File Formats
14.构架 | Frameworks
15.输入 | Importing
16.输入/输出 | Input/ouput
17.国际化 | Internationalization
18.网络 | Internet
19.网络数据 | Internet Data
20.翻译 | Interpreters
21.语言 | Language
22.记录 | Logging
23.Mac OS
24.MS Windows
25.多媒体 | Multimedia
26.联网 | Networking
27.数字与数学 | Numeric & Mathematical
28.操作系统 | Operating System
29.可选操作系统 | Optional Operating System
30.限制执行 | Restricted Execution
31.运行 | Runtime
32.SGI IRIX
33.软件包装与分销 | Software Packaging & Distribution
34.字符串 | String
35.结构化标记 | Structured Markup
36.Tk
37.Unix
38.Python 简介
39.Python pass 语句
40.Python 循环嵌套
41.Python 运算符
42.Python log10() 函数
43.Python log() 函数
44.Python floor() 函数
45.Python fabs() 函数
46.Python exp() 函数
47.Python cmp() 函数
48.Python ceil() 函数
49.Python abs() 函数
50.Python Number(数字)
51.Python pow() 函数
52.Python modf() 函数
53.Python min() 函数
54.Python max() 函数
55.Python asin() 函数
56.Python acos() 函数
57.Python uniform() 函数
58.Python shuffle() 函数
59.Python seed() 函数
60.Python random() 函数
61.Python randrange() 函数
62.Python choice() 函数
63.Python sqrt() 函数
64.Python round() 函数
65.Python radians() 函数
66.Python degrees() 函数
67.Python tan() 函数
68.Python sin() 函数
69.Python hypot() 函数
70.Python cos() 函数
71.Python atan2() 函数
72.Python atan() 函数
73.Python 元组
74.Python 列表(List)
75.Python 字符串
76.Python 字典(Dictionary)
77.Python 日期和时间
78.Python 函数
79.Python 模块
80.Python capitalize()方法
81.Python center()方法
82.Python count() 方法
83.Python expandtabs()方法
84.Python endswith()方法
85.Python encode()方法
86.Python decode()方法
87.Python find()方法
88.Python index()方法
89.Python 异常处理
90.Python isspace()方法
91.Python isnumeric()方法
92.Python islower()方法
93.Python isdigit()方法
94.Python isalpha()方法
95.Python isalnum()方法
96.Python isupper()方法
97.Python istitle()方法
98.Python min()方法
99.Python max()方法
100.Python maketrans()方法