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()
posted @ 2018-11-13 23:05  叶小黑  阅读(309)  评论(0编辑  收藏  举报