生产者和消费者模型producer and consumer(单线程下实现高并发)

#1、生产者和消费者模型producer and consumer model
import time
def producer():
ret = []
for i in range(2):
time.sleep(0.2)
ret.append("包子%s" %i)
return ret
def consumer(res):
for index,baozi in enumerate(res):
time.sleep(0.2)
print("第%s个人,吃了%s" %(index,baozi))
res = producer()
consumer(res)
print("上面的结束了-------------------------------------------------------------")
#2、单线程下实现高并发
def test():
print("开始啦")
firt = yield #这个1相当于return的1,相当于函数的返回值,而yield会接收一个值传送给firt,这个firt是函数内部的局部变量
print("第一次",firt)
yield 2
print("第二次")
t = test()
res = t.__next__() #等同于next(t) 定义res的意思是定义返回值也就是上面的yield的返回值1
print(res)
# t.__next__()
#生成器下面的send方法
# res = t.send(None) #t.send(None)就send给yield1了 yield1可以赋值firt send(None)可以保证函数接着运行 send(None)里面的参数会传给赋值
res = t.send("函数停留在first那个位置,我就是给first赋值的") #send可以触发
print(res)
#t.__next__方法就等同于t.send(None)方法
print("上面的结束了了了--------------------------------------------------------------------------------------------------------ll")
#并发:两个程序同时在等待,A程序生产完成调到B程序,B程序生产完成以后再跳到A程序,来回切换的过程,两个程序没有先后的顺序
import time
def consumer(name):
print("我是[%s,我准备开始吃包子了]" %name)
while True:
baozi = yield #yield代表等待包子的过程
time.sleep(1)
print("%s 很开心的把【%s】吃掉了" %(name,baozi))
def producer():
c1 = consumer("wupeiqi")
c2 = consumer("yuanhao_SB")
c1.__next__()
c2.__next__()
for i in range(10):
time.sleep(1)
c1.send("包子 %s" %i)
c2.send("包子 %s" %i)
producer() #调用producer函数由send触发了另外一个函数,由另外一个函数结束了以后又跳到了原先的函数,然后接着send
生产者和消费者模型producer and consumer(单线程下实现高并发)的更多相关文章
- Java里的生产者-消费者模型(Producer and Consumer Pattern in Java)
生产者-消费者模型是多线程问题里面的经典问题,也是面试的常见问题.有如下几个常见的实现方法: 1. wait()/notify() 2. lock & condition 3. Blockin ...
- Python之生产者&、消费者模型
多线程中的生产者和消费者模型: 生产者和消费者可以用多线程实现,它们通过Queue队列进行通信. import time,random import Queue,threading q = Queue ...
- 【java线程系列】java线程系列之线程间的交互wait()/notify()/notifyAll()及生产者与消费者模型
关于线程,博主写过java线程详解基本上把java线程的基础知识都讲解到位了,但是那还远远不够,多线程的存在就是为了让多个线程去协作来完成某一具体任务,比如生产者与消费者模型,因此了解线程间的协作是非 ...
- python queue和生产者和消费者模型
queue队列 当必须安全地在多个线程之间交换信息时,队列在线程编程中特别有用. class queue.Queue(maxsize=0) #先入先出 class queue.LifoQueue(ma ...
- python并发编程之守护进程、互斥锁以及生产者和消费者模型
一.守护进程 主进程创建守护进程 守护进程其实就是'子进程' 一.守护进程内无法在开启子进程,否则会报错二.进程之间代码是相互独立的,主进程代码运行完毕,守护进程也会随机结束 守护进程简单实例: fr ...
- 人生苦短之我用Python篇(队列、生产者和消费者模型)
队列: queue.Queue(maxsize=0) #先入先出 queue.LifoQueue(maxsize=0) #last in fisrt out queue.PriorityQueue( ...
- python:生产者与消费者模型
1,生产者与消费者模型的矛盾在于数据供需的不平衡 import time import random from multiprocessing import Queue from multiproce ...
- Python 之并发编程之进程下(事件(Event())、队列(Queue)、生产者与消费者模型、JoinableQueue)
八:事件(Event()) # 阻塞事件: e = Event() 生成事件对象e e.wait() 动态给程序加阻塞,程序当中是否加阻塞完全取决于该对象中的is_set() [默认返回值 ...
- python多线程+生产者和消费者模型+queue使用
多线程简介 多线程:在一个进程内部,要同时干很多事情,就需要同时执行多个子任务,我们把进程内的这些子任务叫线程. 线程的内存空间是共享的,每个线程都共享同一个进程的资源 模块: 1._thread模块 ...
随机推荐
- Python 栈(stack)
Python 栈(stack) 栈(stack)又名堆栈,它是一种运算受限的线性表 栈只能在一端进行插入和删除操作,它按照先进后出(FILO)的原则存储数据,先进入的数据被压入栈底,最后的数据在栈顶 ...
- 教你用好 Javascript 数组
原文链接:https://juejin.im/post/5d9769b26fb9a04df26c1b89 作为 Javascript 的标准对象之一,数组是非常底层而且实用的数据结构.虽然结构很简单, ...
- AtCoder Beginner Contest 139F Engines
链接 problem 给出\(n\)个二元组\((x,y)\).最初位于原点\((0,0)\),每次可以从这\(n\)个二元组中挑出一个,然后将当前的坐标\((X,Y)\)变为\((X+x,Y+y)\ ...
- babel速览
babel babel初衷 在es6出现之后,由于此版本的巨大改变,给人们带来了很多革命性的技术支持,但是当时很多浏览器对es6支持有限,babel就是为了达到写最新的语法,可以在任意浏览器运行而出现 ...
- QAxBase: Error calling IDispatch member LineStyle: Unknown error
word/Excel版本2007.2010. wps也适用. //borders->dynamicCall("SetLineStyle(int,int,int)", 0, ...
- 数据仓库005 - 复习Linux shell命令 - crontab调度 sh脚本 后台执行 软连接
一.crontab调度 对于linux 自带crontab而言, xxx.sh的一般编写格式以#!/bin/bash 解释器开头,可在脚本中加入: date 但是,shell脚本执行 需要 ...
- HTML连载32-背景颜色、背景图片、背景填充
一.背景 1.如何设置标签的背景颜色 (1)在CSS中有一个background-color:属性值:,就是专门用来设置标签的背景颜色. (2)取值:具体单词.RGB.RGBA.十六进制 例子: &l ...
- python在字节流中对int24的转换
python在字节流中对int24的转换 概述 最近在写项目的过程中,需要对从串口中读取的数据进行处理,本来用C写完了,但是却一直拿不到正确的数据包,可能是因为自己太菜了.后来用了python重新写了 ...
- ubuntu16.04安装QGIS工具
指令安装安装qgis可以通过添加安装源的形式进行 sudo add-apt-repository ppa:ubuntugis/ubuntugis-unstable sudo apt-get updat ...
- redis之主从同步
很多企业都没有使用到 Redis 的集群,但是至少都做了主从.有了主从,当 master 挂掉的时候,运维让从库过来接管,服务就可以继续,否则 master 需要经过数据恢复和重启的过程,这就可能会拖 ...