立即打开
楼主
21492
100
收藏
2014-06-16
来自Python视频主讲阎老师:
生产者消费者问题是一个著名的线程同步问题,该问题描述如下:有一个生产者在生产产品,这些产品将提供给若干个消费者去消费,为了使生产者和消费者能并发执行,在两者之间设置一个具有多个缓冲区的缓冲池,生产者将它生产的产品放入一个缓冲区中,消费者可以从缓冲区中取走产品进行消费,显然生产者和消费者之间必须保持同步,即不允许消费者到一个空的缓冲区中取产品,也不允许生产者向一个已经放入产品的缓冲区中再次投放产品。
# -*- coding: gbk -*-
import threading, time
milk = 0
pool_size = 100 #池的大小
mylock = threading.RLock()
class producer(threading.Thread):
"""生产者,主要的业务逻辑为 往池中加入milk,以备消费者使用"""
def __init__(self, step, theadName):
threading.Thread.__init__(self)
self.step = step
self.isRunable = True
self.threadName = theadName
def run(self):
global milk
while True and self.isRunable:
time.sleep(2)
mylock.acquire();
if(milk >= pool_size):
print "[生产者]池中的milk已经足够多[%dL],怎么就没有人来买?" % (milk)
else:
interval = pool_size - milk #防止池溢出,造成浪费
if(interval < self.step):
milk = pool_size
else:
interval = self.step
milk += self.step
print "[生产者]名称:%s 生产了 %dL 的milk 加入了池中, 池中的总量为 %dL" % (self.threadName, interval, milk)
mylock.release()
else:
print "干了一天了,准备休息了拜拜了!"
def stop(self):
self.isRunable = False
class customer(threading.Thread):
def __init__(self, amount , theadName):
threading.Thread.__init__(self)
self.amount = amount
self.isRunable = True
self.threadName = theadName
def run(self):
global milk
while True and self.isRunable:
time.sleep(5)
mylock.acquire();
if(milk > self.amount ) :
milk -= self.amount
print "[消费者]名称 %s 新鲜的milk,我要开始消费了,老板来%dL" % (self.threadName, self.amount)
else:
print "[消费者]池中的milk不足够我消费,等待中....."
mylock.release()
else:
print "差不多了,货都买齐了,准备撤了!"
def stop(self):
self.isRunable = False
if __name__ == "__main__":
p1 = producer(10, "小奶牛")
p2 = producer(20, "老奶牛")
p1.start()
p2.start()
c1 = customer(5, "路人甲")
c2 = customer(4, "路人乙")
c3 = customer(5, "杨白劳")
c1.start()
c2.start()
c3.start()
time.sleep(2*60) #准备结束
p1.stop()
p2.stop()
c1.stop()
c2.stop()
值得注意的是,python对格式的要求近乎苛刻,有几个循环同时出现在一段程序中的时候,要更加留意缩进问题,失之毫厘谬之千里。
Python作为新起潮流科学计算明星语言,其逻辑更加人性化,功能也丝毫不输给R这样强大的语言~
Python数据分析应用
从起步到应用 一次搞定
Python数据分析近20个小时的全程视频
基础(600元)+高级(800元)=全程1200元
初级:http://www.peixun.net/view/304.html
高级:http://www.peixun.net/view/338.html
扫码加我 拉你入群
请注明:姓名-公司-职位
以便审核进群资格,未注明则拒绝
全部回复
扫码加我 拉你入群
请注明:姓名-公司-职位
以便审核进群资格,未注明则拒绝
扫码加我 拉你入群
请注明:姓名-公司-职位
以便审核进群资格,未注明则拒绝
扫码加我 拉你入群
请注明:姓名-公司-职位
以便审核进群资格,未注明则拒绝
扫码加我 拉你入群
请注明:姓名-公司-职位
以便审核进群资格,未注明则拒绝
扫码加我 拉你入群
请注明:姓名-公司-职位
以便审核进群资格,未注明则拒绝
点击查看更多内容…
扫码加我 拉你入群
请注明:姓名-公司-职位
以便审核进群资格,未注明则拒绝
扫码加我 拉你入群
请注明:姓名-公司-职位
以便审核进群资格,未注明则拒绝
扫码加我 拉你入群
请注明:姓名-公司-职位
以便审核进群资格,未注明则拒绝
扫码加我 拉你入群
请注明:姓名-公司-职位
以便审核进群资格,未注明则拒绝
扫码加我 拉你入群
请注明:姓名-公司-职位
以便审核进群资格,未注明则拒绝
扫码加我 拉你入群
请注明:姓名-公司-职位
以便审核进群资格,未注明则拒绝
扫码加我 拉你入群
请注明:姓名-公司-职位
以便审核进群资格,未注明则拒绝
扫码加我 拉你入群
请注明:姓名-公司-职位
以便审核进群资格,未注明则拒绝
扫码加我 拉你入群
请注明:姓名-公司-职位
以便审核进群资格,未注明则拒绝
扫码加我 拉你入群
请注明:姓名-公司-职位
以便审核进群资格,未注明则拒绝
扫码加我 拉你入群
请注明:姓名-公司-职位
以便审核进群资格,未注明则拒绝
学习了

扫码加我 拉你入群
请注明:姓名-公司-职位
以便审核进群资格,未注明则拒绝
扫码加我 拉你入群
请注明:姓名-公司-职位
以便审核进群资格,未注明则拒绝
扫码加我 拉你入群
请注明:姓名-公司-职位
以便审核进群资格,未注明则拒绝
扫码加我 拉你入群
请注明:姓名-公司-职位
以便审核进群资格,未注明则拒绝
扫码加我 拉你入群
请注明:姓名-公司-职位
以便审核进群资格,未注明则拒绝
扫码加我 拉你入群
请注明:姓名-公司-职位
以便审核进群资格,未注明则拒绝
扫码加我 拉你入群
请注明:姓名-公司-职位
以便审核进群资格,未注明则拒绝
扫码加我 拉你入群
请注明:姓名-公司-职位
以便审核进群资格,未注明则拒绝
扫码加我 拉你入群
请注明:姓名-公司-职位
以便审核进群资格,未注明则拒绝
扫码加我 拉你入群
请注明:姓名-公司-职位
以便审核进群资格,未注明则拒绝
扫码加我 拉你入群
请注明:姓名-公司-职位
以便审核进群资格,未注明则拒绝
扫码加我 拉你入群
请注明:姓名-公司-职位
以便审核进群资格,未注明则拒绝
扫码加我 拉你入群
请注明:姓名-公司-职位
以便审核进群资格,未注明则拒绝
相关推荐
栏目导航
热门文章
推荐文章
扫码加好友,拉您进群