队列queue

队列是一种容器,可以将数据放入队列中,也可以从队列中取数据,其实列表也是一种容器,为什么不用列表存数据,而要用队列存数据呢,他们的主要区别在于队列是放入的数据再取出后,队列中就没有这个数据了,而从列表中取数据后在列表中这个数据还是存在的。

队列的存取顺序有:

class queue.Queue(maxsize=0) #先入先出
class queue.LifoQueue(maxsize=0) #last in fisrt out 后进先出
class queue.PriorityQueue(maxsize=0) #存储数据时可设置优先级的队列
#!/usr/bin/env  python
# -*- coding:utf-8 -*-
import  Queue
q = Queue.Queue()#这种写法是在python2.x中,在python3.x中全部改成小写。
q.put(1)
q.put(2)
q.put(3)
print q.get()
print q.get()
print q.get()

队列主要用在消费者和生产者模型中。

生产者和消费者示例:

import time,random
import queue,threading
q = queue.Queue()
def Producer(name):
  count = 0
  while count <20:
    time.sleep(random.randrange(3))
    q.put(count)
    print('Producer %s has produced %s baozi..' %(name, count))
    count +=1
def Consumer(name):
  count = 0
  while count <20:
    time.sleep(random.randrange(4))
    if not q.empty():
        data = q.get()
        print(data)
        print('\033[32;1mConsumer %s has eat %s baozi...\033[0m' %(name, data))
    else:
        print("-----no baozi anymore----")
    count +=1
p1 = threading.Thread(target=Producer, args=('A',))
c1 = threading.Thread(target=Consumer, args=('B',))
p1.start()
c1.start()

 

posted @ 2017-07-05 16:07  goser  阅读(100)  评论(0)    收藏  举报