生产者消费者模型

#!/usr/bin/env python
# -*-coding:utf-8 -*-

'''
生产者消费者模型:

为什么要使用生产者和消费者模式:
在线程世界里,生产者就是生产数据的线程,消费者就是消费数据的线程。在多线程开发中,如果生产者的处理速度很快,
而消费者处理慢,那么生产者就必须等待消费者处理完,才能继续生产数据。同理反过来也不行,因此引进这种模式。

什么是生产消费者模式:
生产者消费模式是通过一个容器来解决生产者和消费者的解耦问题。两者之间不直接通讯,而通过阻塞队列进行通讯,
队列就相当于一个缓冲区,平衡了两者的处理能力。
'''

import time, random
import queue, threading

q = queue.Queue()  # 全局q


def Producer(name):
    count = 0
    while count < 10:
        print("making........")
        time.sleep(random.randrange(3))
        q.put(count)
        print('Producer %s has produced %s baozi..' % (name, count))
        count += 1
        q.task_done()                 # task_done()给队列发信息,队列操作完成(.put())
        # q.join()
        print("ok......")


def Consumer(name):
    count = 0
    while count < 9:
        time.sleep(random.randrange(4))
        if not q.empty():
            # print("waiting.....")
            q.join()                       # 与.task_done()对应
            data = q.get()
            print("eating....")
            # time.sleep(4)

            # q.task_done()
            # 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君',))
# c2 = threading.Thread(target=Consumer, args=('C君',))
# c3 = threading.Thread(target=Consumer, args=('D君',))

p1.start()
c1.start()
# c2.start()
# c3.start()

 

posted @ 2018-08-26 19:54  maxiaonong  阅读(121)  评论(0)    收藏  举报