在程序执行中,例如:爬虫..
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 一块蛋糕被吃掉了
这样子产出和消费基本持平,,就达到了最终的目的...