生产者消费者模型中Queue理解
来源:互联网 发布:淘宝企业店铺能转让吗 编辑:程序博客网 时间:2024/06/06 16:32
在生产者消费者模型中,Queue用作两者之间的缓冲
但是由于Queue的内在机理中包含着自动执行wait、notify等功能的机制,于是单从程序代码上看起来会很奇怪。
比如这段代码(转自星火博客)
from multiprocessing import Process,Queueimport time,random,osdef consumer(q): while True: time.sleep(random.randint(1,3)) res=q.get() if res is None:break print('\033[45m消费者拿到了:%s\033[0m' %res)def producer(seq,q): for item in seq: time.sleep(random.randint(1,3)) print('\033[46m生产者生产了:%s\033[0m' %item) q.put(item)if __name__ == '__main__': q=Queue() c=Process(target=consumer,args=(q,)) c.start() producer(('包子%s' %i for i in range(5)),q) q.put(None) c.join() print('主线程')
如果不了解Queue的内在机理,就会纳闷:consumer开始运行时producer没运行,此时queue是空的啊,为什么在producer向里面装东西之后consumer会自动运行,并且是随着produer一边装入,consumer一边运行?
其实,其内在在于multiprocessing.Queue内在实现是包含类似于threading中的lock和Condition.wait、Condition.notify功能的,在Queue存在时,他会调用wait等待put数据,然后put在推入数据过后会notify,而后wait回响应,继续执行程序。
具体内容可以参考转载自伯乐在线的文章Python中的生产者消费者问题
阅读全文
0 0
- 生产者消费者模型中Queue理解
- 对于生产者消费者模型的理解
- 生产者消费者模型——blocking queue和CountDownLaunch
- Python3之线程Queue实现生产者消费者模型
- 生产者-消费者模型
- 生产者/消费者模型
- 生产者 消费者模型
- 生产者消费者模型
- 生产者&&消费者模型
- 模拟生产者/消费者模型
- 生产者消费者模型
- 生产者消费者模型
- 生产者与消费者模型
- 生产者/消费者模型
- 生产者与消费者模型
- 生产者/消费者模型
- 生产者消费者模型
- 生产者消费者模型
- Mayan游戏
- 2018年产品经理最应该做好的5件事
- SpringBoot整合mybaits(c3p0数据源)
- Salesforce Lightning 在页面布局中添加相关列表tab
- 2017.11.1清北测试
- 生产者消费者模型中Queue理解
- tomcat linux service 服务
- css控制文字行数,超出部分用省略号代替
- google的地址搜索
- JDK8Lambda要点
- 每天一道算法题——字符串匹配
- ZendStudio使用
- Unity_确认栏
- spring1