并发编程之生产者消费者模型

在程序执行中,例如:爬虫..

1 从网络上爬取数据,这个阶段,由于网络原因,一般速度是比较慢的

2 在这些数据中筛选我想要的东西,CPU运行速度很快,这个过程就是比较快的

那么这样子运行下来就会造成,我十分钟爬取到的数据,我花一分钟就处理完了..这就造成了,CPU要长时间在等待数据的到来..

在我们实际生活中:

1 厂家生产出来的东西,一直没有人买,(供大于求)商品可能会涨价

2 厂家生产出来的东西.不够消费者使用的(供不应求).商品就可能降价

为了达到相对的平衡,让社会更好的发展..于是,就产生了生产者,消费者模型..

通过对速度快的一方进行减少(10*(5-3)=20),对速度慢的一方

 1 import time
 2 from multiprocessing import Process, Queue
 3 
 4 
 5 def cook(plate):
 6     """
 7     厨师(生产者)
 8     """
 9     while 1:
10         time.sleep(0.1)  # 厨师每0.1秒做出一个蛋糕
11         plate.put("蛋糕")
12         print("厨师做出了一块蛋糕...")
13 
14 def eat(plate):
15     """
16     食客(消费者)
17     """
18     while 1:
19         time.sleep(0.01)        # 每个食客每0.01秒就把蛋糕吃完了
20         plate.get()
21         print("一块蛋糕被吃掉了")
22 
23 
24 
25 if __name__ == '__main__':
26     plate = Queue()
27     for i in range(3):
28         # 生出3个厨师和3个食客
29         cooker = Process(target=cook, args=(plate, ))
30         cooker.start()
31     for j in range(3):
32         eater = Process(target=eat, args=(plate, ))
33         eater.start()

这样子代码执行..基本是厨师生产蛋糕就被吃掉,(供不应求)

结果对照:

 1 厨师做出了一块蛋糕...
 2 一块蛋糕被吃掉了
 3 厨师做出了一块蛋糕...
 4 一块蛋糕被吃掉了
 5 厨师做出了一块蛋糕...
 6 一块蛋糕被吃掉了
 7 厨师做出了一块蛋糕...
 8 一块蛋糕被吃掉了
 9 厨师做出了一块蛋糕...
10 一块蛋糕被吃掉了
 1 def cook(plate):
 2     """
 3     厨师(生产者)
 4     """
 5     while 1:
 6         time.sleep(0.1)  # 厨师每0.1秒做出一个蛋糕
 7         plate.put("蛋糕")
 8         print("厨师做出了一块蛋糕...")
 9 
10 def eat(plate):
11     """
12     食客(消费者)
13     """
14     while 1:
15         time.sleep(0.01)        # 每个食客每0.01秒就把蛋糕吃完了
16         plate.get()
17         print("一块蛋糕被吃掉了")
18 
19 
20 
21 if __name__ == '__main__':
22     plate = Queue()
23     for i in range(10):
24         # 生出10个厨师
25         cooker = Process(target=cook, args=(plate, ))
26         cooker.start()
27     for j in range(3):
28         # 生成3个食客
29         eater = Process(target=eat, args=(plate, ))
30         eater.start()

结果对照:

 1 厨师做出了一块蛋糕...
 2 一块蛋糕被吃掉了
 3 厨师做出了一块蛋糕...
 4 厨师做出了一块蛋糕...
 5 厨师做出了一块蛋糕...
 6 一块蛋糕被吃掉了
 7 一块蛋糕被吃掉了
 8 一块蛋糕被吃掉了
 9 厨师做出了一块蛋糕...
10 一块蛋糕被吃掉了
11 厨师做出了一块蛋糕...
12 一块蛋糕被吃掉了

这样子产出和消费基本持平,,就达到了最终的目的...