python之生产者消费者模型
#Auther Bob
#--*--conding:utf-8 --*--
#生产者消费者模型,这里的例子是这样的,有一个厨师在做包子,有一个顾客在吃包子,有一个服务员在储存包子,这个服务员我们就可以用queue来实现
import threading
import queue
import time '''
def consumer(p,que):
id = que.get()
print("[%s]来吃包子了,我吃到的包子的名字是[%s]" %(p,id)) def prodcer(p,que):
print("[%s]做了2个包子" %(p))
que.put("baozi[1]")
print("baozi[1]做好了")
que.put("baozi[2]")
print("baozi[2]做好了") if __name__ == '__main__':
que = queue.Queue()
p = threading.Thread(target=prodcer,args=("Bob",que))
c1 = threading.Thread(target=consumer,args=("c1",que))
c2 = threading.Thread(target=consumer, args=("c2", que))
c3 = threading.Thread(target=consumer, args=("c3", que))
p.start()
c1.start()
c2.start()
c3.start()
# p.join() ''' #上面这个例子,如果没有包子了,但是厨师会不知道,厨师也不会继续做包子,而没有吃到包子的人会一直等待,程序会一直不结束 #我们可以这样做,消费者发现没有包子了,告诉服务员,服务员在告诉厨师,这里我们就会遇到task.down def consumer(p):
id = que.get()
print("[%s]来吃包子了,我吃到的包子的名字是[%s]" %(p,id))
que.task_done() #如归队列为空了,则会通知que.join,que.join就不会阻塞了 """ def prodcer(p):
while True:
if que.qsize() < 3:
# time.sleep(1)
for i in range(2):
print("[%s]做了包子[%d]" %(p,i))
que.put(i)
que.join() #如果队列一直不为空,则que.join会一直阻塞,如果队列为空,则que.join就不阻塞了
"""
def prodcer(p):
while True:
# time.sleep(1)
for i in range(2):
print("[%s]做了包子[%d]" %(p,i))
que.put(i)
que.join() #如果队列一直不为空,则que.join会一直阻塞,如果队列为空,则que.join就不阻塞了
if __name__ == '__main__':
que = queue.Queue()
p = threading.Thread(target=prodcer,args=("Bob1",))
p2 = threading.Thread(target=prodcer, args=("Bob2",))
c1 = threading.Thread(target=consumer,args=("c1",))
c2 = threading.Thread(target=consumer, args=("c2",))
c3 = threading.Thread(target=consumer, args=("c3",))
c4 = threading.Thread(target=consumer, args=("c4",))
c5 = threading.Thread(target=consumer, args=("c5",))
c6 = threading.Thread(target=consumer, args=("c6",))
p.start()
p2.start()
c1.start()
c2.start()
c3.start()
c4.start()
c5.start()
c6.start()
# p.join()
# que.task_done()
python之生产者消费者模型的更多相关文章
- Python多线程-生产者消费者模型
用多线程和队列来实现生产者消费者模型 # -*- coding:utf-8 -*- __author__ = "MuT6 Sch01aR" import threading imp ...
- (python)生产者消费者模型
生产者消费者模型当中有两大类重要的角色,一个是生产者(负责造数据的任务),另一个是消费者(接收造出来的数据进行进一步的操作). 为什么要使用生产者消费者模型? 在并发编程中,如果生产者处理速度很快,而 ...
- python 之生产者消费者模型
进程实现: import time,random from multiprocessing import Process,Queue def producer(name,q): count= 0 wh ...
- python实现生产者消费者模型
生产者消费之模型就是,比如一个包子铺,中的顾客吃包子,和厨师做包子,不可能是将包子一块做出来,在给顾客吃,但是单线程只能这麽做,所以用多线程来执行,厨师一边做包子,顾客一边吃包子,当顾客少时,厨师做的 ...
- Python学习笔记——进阶篇【第九周】———线程、进程、协程篇(队列Queue和生产者消费者模型)
Python之路,进程.线程.协程篇 本节内容 进程.与线程区别 cpu运行原理 python GIL全局解释器锁 线程 语法 join 线程锁之Lock\Rlock\信号量 将线程变为守护进程 Ev ...
- python生产者消费者模型
业界用的比较广泛,多线程之间进行同步数据的方法,解决线程之间堵塞,互相不影响. server --> 生产者 client --> 消费者 在一个程序中实现又有生产者又有消费者 ,生产者不 ...
- 进程,线程,GIL,Python多线程,生产者消费者模型都是什么鬼
1. 操作系统基本知识,进程,线程 CPU是计算机的核心,承担了所有的计算任务: 操作系统是计算机的管理者,它负责任务的调度.资源的分配和管理,统领整个计算机硬件:那么操作系统是如何进行任务调度的呢? ...
- python并发编程之多进程(二):互斥锁(同步锁)&进程其他属性&进程间通信(queue)&生产者消费者模型
一,互斥锁,同步锁 进程之间数据不共享,但是共享同一套文件系统,所以访问同一个文件,或同一个打印终端,是没有问题的, 竞争带来的结果就是错乱,如何控制,就是加锁处理 part1:多个进程共享同一打印终 ...
- Python之路(第三十八篇) 并发编程:进程同步锁/互斥锁、信号量、事件、队列、生产者消费者模型
一.进程锁(同步锁/互斥锁) 进程之间数据不共享,但是共享同一套文件系统,所以访问同一个文件,或同一个打印终端,是没有问题的, 而共享带来的是竞争,竞争带来的结果就是错乱,如何控制,就是加锁处理. 例 ...
随机推荐
- 阿里云内网和公网NTP服务器和其他互联网基础服务时间同步服务器
阿里云为云服务器ECS提供了内网NTP服务器,对于阿里云以外的设备,阿里云同时提供了 公网NTP服务器,供互联网上的设备使用. 内网和公网NTP服务器 以下为阿里云提供的内网和公网NTP服务器列表. ...
- 什么是DSCP,如何使用DSCP标记搭配ROS策略
一.什么是DSCP DSCP:差分服务代码点(Differentiated Services Code Point),IETF于1998年12月发布了Diff-Serv(Differentiated ...
- 理解prototype
从别人的博客里面盗了2张图,这2张图将对象/实例/prototype/__proto__/constructor之间的关系描绘的很清楚. 1.prototype 为 function的属性,实例化的对 ...
- django 更新 安装及原理
Django框架简介 MVC框架和MTV框架(了解即可) MVC,全名是Model View Controller,是软件工程中的一种软件架构模式,把软件系统分为三个基本部分:模型(Model).视图 ...
- Mysql-事务,原子性操作
事物分为 自动(默认的)和手动(需开启事务)两种 -- 事务 start transaction; -- commite; 提交事务 -- rollback; 回滚事务 create table if ...
- thymeleaf的使用
1.导包 <dependency> <groupId>org.springframework.boot</groupId> <artifactId>sp ...
- 使用 Java DB (Derby) 数据库
使用 Java DB (Derby) 数据库 https://netbeans.org/kb/docs/ide/java-db_zh_CN.html 本文档说明了如何在 NetBeans IDE 中设 ...
- HTTPS 路径配置
1: 首先安装 fiddlercertmaker.exe 文件 2:Tools -> HTTPS 3: Connections 勾中Allow remote computer to ...
- cv::circle《转》
void circle(CV_IN_OUT Mat& img, Point center, int radius, const Scalar& color, int thickness ...
- 基于OpenGL编写一个简易的2D渲染框架-03 渲染基本几何图形
阅读文章前需要了解的知识,你好,三角形:https://learnopengl-cn.github.io/01%20Getting%20started/04%20Hello%20Triangle/ 要 ...