常用函数
Queue.Queue(masize):构造函数,创建了一个队列,先进先出
Queue.LifoQueue(maxsize) : 构造函数,相当于创建一个栈,后进先出
Queue.put():在队列的尾部插入一个项目,它有2个参数,一个是需要插入的项,第二个默认参数值为1,方法让线程暂停,直到空出一个数据单元项,如果参数为0,会出发Full Python的异常。
Queue.get(): 从队列头部删除而且返回一个项目,有一个可选参数,默认值是真,也就是True。get()就使调用线程暂停,直至有项目可用,如果队列为空且block为False,队列将引发Empty的Python异常。
Queue.qsize(): 返回队列的大小
Queue.empty() :如果队列为空,返回True,反之False
Queue.full() :如果队列满了,返回True,反之False,Queue.full 与 maxsize 大小对应
Queue.get_nowait() 相当Queue.get(False)
Queue.put_nowait(item) 相当Queue.put(item, False)
Queue.task_done() 在完成一项工作之后,Queue.task_done()函数向任务已经完成的队列发送一个信号
Queue.join() 实际上意味着等到队列为空,再执行别的操作
来个简单例子
# -*- coding: UTF-8 -*-
import threading
import Queue
import time
class MyThread(threading.Thread):
def __init__(self, threadID, name, type):
super(MyThread, self).__init__()
self.threadID, self.name,self.type = threadID, name, type
def run(self):
print "开始进程: " + self.name
if self.type == 'w':
self.run_write()
else:
self.run_read()
print "退出进程:" + self.name
def run_write(self):
'''往队列中写'''
global que
for i in range(10):
que.put(i)
print '%s put num : %d ' % ( self.name, i)
time.sleep(1)
def run_read(self):
'''从队列中取出来'''
global que
for i in range(10):
print '%s get num : %d ' % ( self.name, que.get())
time.sleep(1)
printQue(que)
def printQue(q):
'''打印队列'''
while not q.empty():
print q.get(),
def test(que):
'''test'''
thread1 = MyThread(1, 'thread-w', 'w')
thread2 = MyThread(2, 'thread-r', 'r')
thread1.start()
thread2.start()
print threading.enumerate()
print "主进程退出"
if __name__ == '__main__':
que = Queue.Queue()
test(que)