生产者和消费者模型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模块 ...
随机推荐
- 解释JUnit中@BeforeClass和@AfterClass标注的方法必须是static的,而在TestNg不必
在JUnit中@BeforeClass和@AfterClass标注的方法必须是static的:但是在TestNg中却没有这样的限制,这是为什么呢. 其实和他们两的运行机制有关. 在junit中: 每运 ...
- Vue 使用comouted计算属性
computed计算属性 使用方法见代码: <!doctype html> <html lang="en"> <head> <meta c ...
- 函数式接口与Stream流
lambda表达式是jdk8的特性.lambda表达式的准则是:可推断,可省略. 常规代码写一个多线程 public class Main { public static void main(Stri ...
- LeetCode 26:删除排序数组中的重复项 Remove Duplicates from Sorted Array
给定一个排序数组,你需要在原地删除重复出现的元素,使得每个元素只出现一次,返回移除后数组的新长度. 不要使用额外的数组空间,你必须在原地修改输入数组并在使用 O(1) 额外空间的条件下完成. Give ...
- mysql-新增数据库
一.新增数据库 1.检查mysql 新增数据库之前,先检查是否安装了数据库,本次我们使用的是mysql数据库,检查是否安装mysql直接使用 mysql --version即可: 显示了mysql的版 ...
- svg path 解析
<pre><svg width="100%" height="100%" version="1.1" xmlns=&quo ...
- 明解C语言 中级篇 第三章答案
练习3-1 /* 猜拳游戏(其四:分割函数/显示成绩)*/ #include <time.h> #include <stdio.h> #include <stdlib.h ...
- h5中的audio音频标签与对应的dom对象
HTML5中提供了一个<audio>标签,同时也提供了一个Audio对象给JavaScript去操作,这个对象属于HTML的DOM对象. H5中的<audio>标签 此标签是H ...
- Linux chattr 文件保护
Linux chattr 文件保护 chattr命令的用法:chattr [ -RV ] [ -v version ] [ mode ] files…注:最关键的是在[mode]部分,[mode]部分 ...
- [Node.js] TypeScript 实现 sleep 函数
看过不少网友的文章, 有各种方法, 但我想要的是一个能线性执行的sleep函数. /** * 等待指定的时间 * @param ms */ static async sleep(ms: number) ...