Produce-Consumer Problem
来源:互联网 发布:淘宝阿尔法软件 编辑:程序博客网 时间:2024/06/07 07:50
# -*- encoding: utf8 -*-from threading import Thread, Conditionfrom Queue import Queueimport timeimport randomCONDITION = Condition()class Pool(Queue):"""模拟一个能存放固定数目的值的缓存区"""def __init__(self, maxsize):Queue.__init__(self)self.length = 0self._maxsize = maxsizedef get(self):if self.length == 0:raise Exception("The pool is empty!")self.length -= 1return Queue.get(self)def put(self, value):if self.length == self._maxsize:raise Exception("The pool is full!")self.length += 1Queue.put(self, value)def empty(self):if self.length == 0:return Truereturn Falsedef full(self):if self.length == self._maxsize:return Truereturn Falseclass Producer(Thread):"""模拟生产者,每次生产一个值放入缓存区,如果缓存区为满就停止生产"""def __init__(self, queue):Thread.__init__(self)self.pool = queuedef run(self):while True:CONDITION.acquire()if self.pool.full():print 'Producer : I will sleep...'CONDITION.wait() #Producer挂起,同时释放Consumer的线程锁print 'Produce : I woke up...'if not self.pool.full():temp = random.randint(0,100)self.pool.put(temp)print 'Producer : I produce a value : ', tempCONDITION.notify() #唤醒Consumer,但notify()并未释放锁CONDITION.release()#释放锁让Consumer运行time.sleep(1)class Consumer(Thread):"""模拟消费者,每次处理两个值"""def __init__(self, queue):Thread.__init__(self)self.pool = queuedef run(self):while True:CONDITION.acquire()if self.pool.length < 2: print 'Consumer: I will sleep...'CONDITION.wait()print 'Consumer : I woke up...'if self.pool.length >= 2:temp1 = self.pool.get()temp2 = self.pool.get()print 'Consumer : I will handle %s and %s' % (temp1, temp2)CONDITION.notify()CONDITION.release()time.sleep(3)def test():buffer_pool = Pool(10)producer = Producer(buffer_pool)consumer = Consumer(buffer_pool)producer.start()consumer.start()if __name__ == '__main__':test()
0 0
- Produce-Consumer Problem
- Java多线程设计模式-学习笔记-Produce/Consumer模式.
- The Producer-Consumer Problem
- Producer-consumer problem
- An Analysis of the Producer-Consumer Problem
- 生产者消费者问题(Producer-consumer problem)
- Producer Consumer problem - mutex and semaphore
- 生产者-消费者问题(producer-consumer-problem)
- 生产者-消费者问题(The producer-consumer problem)
- Producer consumer problem - 生产者消费者问题
- Consumer
- oracle produce
- Internet高级编程作业:Producer-consumer problem implemented by semaphore
- Solution to the Producer-Consumer problem using Semaphores
- 进程同步--生产者消费者问题(Producer-consumer Problem)
- busybox produce initrd
- 1015 milk produce
- Fastlane的produce指令
- 【数据结构】第二章 线性表 学后总结与心得
- 去掉DedeCMS"当前位置"面包屑结尾的大于号">"
- 【Linux学习笔记】Unix/Linux 信号详解
- Makefile详解
- 获取计算机的IP地址
- Produce-Consumer Problem
- JAVA基础:path,classpath
- CodeVs 1134 && noip 2011 Day1 铺地毯
- 记录软件开发中的一些软件配置等问题
- Cocos2d-X中使用ProgressTimer实现一些简单的效果
- struts2--文件上传大小
- C语言中fpritnf函数的简单理解
- INSTALL_FAILED_NO_MATCHING_ABIS 的解决办法
- 在Eclipse中配置tomcat,浏览器输入http://localhost:8080报404错误解决方法