BLOG
Enjoy when you can, and endure when you must.
DEC 23, 2012/Python
Python Queue

线程编程中,正确的线程同步是保证数据正确性所不可缺少的。我们经常会采用生产者/消费者关系的两个线程来处理一个共享缓冲区的数据。利用Python的List和互斥锁可以模拟出一个共享的缓冲区。不过更简单的方法是利用Python的Queue模块。

Python Queue模块有三种队列:

1. FIFO(先进先出)队列,构造函数为Queue.Queue(maxsize)

2. LIFO(先进后出)队列,构造函数为Queue.LifoQueue(maxsize)

3. 优先级队列 PriorityQueue(),构造函数为Queue.PriorityQueue(maxsize)

这三种队列的构造函数都接受一个可选的参数maxsize,即队列的最大长度,如果不指定则默认为0,表示队列无限长。

new_queue = Queue.Queue(maxsize = 10)

上面创建了一个先进先出的队列,其最大长度为10。

要向队列中添加一项,可使用队列的put()方法:

new_queue.put(item)

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

队列的get()方法可以从队头删除并返回一个项目。

myqueue.get()

get()方法可选参数为block,默认为True。如果队列为空且block为True,get()就使调用线程暂停,直至有项目可用。如果队列为空且block为False,队列将引发Empty异常。

Queue.qsize()

qsize()方法可以返回队列的大小。

如果要知道队列是不是为空,或者是否已满,可以分别使用以下方法:

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

Queue.full()    如果队列已满,返回True,否则返回False
       还有一些常用的方法:

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

Queue.join() 等到队列为空,再继续执行别的操作。

COMMENTS
LEAVE COMMNT