python 队列
当必须在多个线程之间安全地交换信息时,队列在线程编程中特别有用。
Queue是python标准库中的线程安全的队列(FIFO)实现,提供了一个适用于多线程编程的先进先出的数据架构,即队列。用来在生产者和消费者线程之间的信息传递
1 import queue 2 3 q = queue.Queue() 4 # queue.Queue类即是一个队列的同步实现。队列长度可为无限或者有限。可通过Queue的构造函数的可选参数maxsize来设定队列长度。如果maxsize小于1就表示队列长度无限。 5 6 q.put(12) 7 # 调用队列对象的put()方法在队尾插入一个项目。put()有两个参数,第一个item为必需的,为插入项目的值;第二个block为可选参数,默认为 8 # 1。如果队列当前为空且block为1,put()方法就使调用线程暂停,直到空出一个数据单元。如果block为0,put方法将引发Full异常。 9 10 print(q.get()) 11 # 调用队列对象的get()方法从队头删除并返回一个项目。可选参数为block,默认为True。如果队列为空且block为True,get()就使调用线程暂停,直至有项目可用。如果队列为空且block为False,队列将引发Empty异常。
常用方法:
1 q.qsize() # 返回队列的大小 2 q.empty() # 返回队列为空,空为True,反之为False 3 q.full() # 返回队列是否已经满了,满了返回true,反之False 4 q.join() # 实际上意味着等到队列为空,在执行别的操作
Python中的三种队列:
1、Python Queue模块的FIFO队列先进先出。 class queue.Queue(maxsize)
2、LIFO类似于堆,即先进后出。 class queue.LifoQueue(maxsize)
3、还有一种是优先级队列级别越低越先出来。 class queue.PriorityQueue(maxsize)
实例:
1 import threading,queue 2 from time import sleep 3 from random import randint 4 5 class Production(threading.Thread): 6 def run(self): 7 while True: 8 r = randint(0,100) 9 q.put(r) 10 print("生产出了%s号包子"%r) 11 sleep(1) 12 13 class Proces(threading.Thread): 14 def run(self): 15 while True: 16 re = q.get() 17 print("吃掉%s号包子"%re) 18 19 if __name__ == "__main__": 20 q=queue.Queue(6) 21 threads = [Production(),Production(),Proces()] 22 for i in threads: 23 i.start()