python之函数实现生产者消费者模型(开发模型)
2017-02-16 14:47
453 查看
#!/usr/bin/env /python import threading import time import Queue import random #生产者 def Proudcer(name,que): while True: if que.qsize() < 3: #如果只剩下3个包子就又开始生产包子(如果队列中的数据为3个时) que.put('baozi') #包子入队列 print '%s 生产包子...' % name else: print "%s 仅剩3个包子..." time.sleep(random.randrange(5)) #随机在1-5秒内开始生产包子(推迟调用线程的运行,可通过参数secs指秒数,表示进程挂起的时间) #消费者 def Consumer(name,que): while True: try: que.get_nowait() #消费者消费包子(从队列取数据,且为非阻塞模式,如果队列为空了,则会引发出异常) print ' %s 消费包子...' % name time.sleep(random.randrange(3)) #随机在1-3秒内开始消费包子(推迟调用线程的运行,可通过参数secs指秒数,表示进程挂起的时间) except Exception: print u'包子已卖完...' #捕捉队列为空时引发的异常 #定义一个队列存用来储包子 q = Queue.Queue() #创建第1个厨师 (也就是线程1,传入name参数:“tantianran”和队列q) p1 = threading.Thread(target=Proudcer,args=['tantianran',q]) #创建第2个厨师 (也就是线程2 p2 = threading.Thread(target=Proudcer,args=['dengwenqing',q]) #启动线程(线程是同时工作) p1.start() p2.start() #创建2个消费者线程分别为c1和c2 c1 = threading.Thread(target=Consumer,args=['xiaofeizhe1',q]) c2 = threading.Thread(target=Consumer,args=['tanyongxing',q]) #启动线程(线程是同时工作) c1.start() c2.start()
下面是一个更具体清晰的例子
#coding:utf-8 import threading, time import Queue # 导入消息队列模块 import random # 导入随机数模块,是为了模拟生产者与消费者速度不一致的情形 q = Queue.Queue() # 实例化一个对象 def Producer(name): # 生产者函数 for i in range(20): q.put(i) # 将结果放入消息队列中 print '%s:生产包子 数量:%s' % (name, i) time.sleep(random.randrange(3)) # 生产者的生产速度,3s内 def Consumer(name): # 消费者函数 count = 0 while count < 20: data = q.get() # 取用消息队列中存放的结果 print '消费者:%s 吃包子:%s' % (name, data) count += 1 time.sleep(random.randrange(4)) # 消费者的消费速度,4s内 p = threading.Thread(target=Producer, args=('tantianran',)) c = threading.Thread(target=Consumer, args=('laowang',)) p.start() c.start()
相关文章推荐
- 11.python并发入门(part8 基于线程队列实现生产者消费者模型)
- 【Python之旅】第六篇(五):生产者消费者模型实现多线程异步交互
- 4.利用python生成器实现简单的“生产者消费者”模型
- 多进程 队列 实现生产者消费者模型 python 笔记
- python编写类来实现生产者消费者模型
- Python3之线程Queue实现生产者消费者模型
- python用于实现多线程异步交互之生产者消费者模型
- python3用消费者和生产者模型,实现视频流读取播放
- 生产者-消费者模型(自定义类 与函数 2种实现方式)
- 利用python实现生产者消费者的并发模型
- linux网络编程之System V 信号量(三):基于生产者-消费者模型实现先进先出的共享内存段
- 生产者消费者模型-python-多进程
- 学习笔记之----生产者-消费者模型的实现
- 生产者与消费者模型实现
- JAVA实现多线程生产者消费者模型
- Java实现生产者——消费者模型
- 在python中实现生产者和消费者的例子(二):使用multiprocessing和queue
- 从java多线程实现“生产者-消费者”模型来谈谈操作系统中线程状态的转换及线程同步的总结
- linux网络编程之System V 信号量(三):基于生产者-消费者模型实现先进先出的共享内存段
- 用BlockingQueue实现一个简单的生产者-消费者模型