Python初识协程已经最经典的yeild生产者消费者模型

原创 2018年04月17日 18:01:08

”’
协程:协程是一种用户化的线程,类似于微线程
协程能保留上一次的调用状态,在单线程下实现并发的效果
协程的好处:
1、无须线程上下文切换的开销
2、无须原子操作锁定及同步的开销,原子操作就是一个最小的操作,如一个线程改一个数
3、方便切换控制流,简化编程模型
4、高并发、高扩展性、低成本:一个cpu支持上万的协程都不是问题,所以很适合用于高并发处理
缺点:
1、无法利用多核资源:协程的本质就是单线程,它不能同时将单个cpu的多核用上,
协程需要配合进程才能运行在多个cpu上,当然日常开发中没有这个必要,除非cpu密集型应用
2、进行阻塞操作(如IO时)会阻塞掉整个程序
”’

import time
# 这是一个消费者 一直在等待完成吃包子的动作
def consumer(name):
    print('%s准备吃包子了!'%name)  #打印出对应的消费者的名字
    while True:   #执行一个死循环 实际上就是需要调用时才会执行,没有调用就会停止在yield
        baozi = yield  #在它就收到内容的时候后就把内容传给baozi
        print('包子【%s】来了,被【%s】吃了'%(baozi,name))
def producer(name):
    c1 = consumer('A')  #它只是把c1变成一个生成器
    c2 = consumer('B') #有yield时第一次会把函数变成生成器,并不会直接调用函数
    c1.__next__() #第一个next只是会走到yield然后停止
    c2.__next__()
    print('老子开始做包子了')
    for i in range(1,10):
        time.sleep(1)
        print('三秒做了两个包子')
        c1.send(i)  #这一步其实就是调用next方法的同时传一个参数i给field接收,然后baozi=i
        c2.send(i+1)
        #其实这里是这样的,在send的时候只是继续执行yield下面的语句,然后去去yield,再次停在这儿

producer('aea')
c = consumer('aaa') #没next一次就会将程序执行一次
# c.__next__()
# c.__next__()
# c.__next__()
版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/haeasringnar/article/details/79978481

WINAMP 配置文件

                           WINAMP 配置文件很简单,就没有翻译了 ;-)Configuration Files Any skin file is not complet...
  • coolstar
  • coolstar
  • 2001-07-11 10:57:00
  • 1073

通过“生产者-消费者模型”理解Python协程和yield关键字

最近学习廖老师的Python3教程,关于协程那块讲得不是很详细,相信很多人像我一样看不懂,经过研究终于弄懂了,现在把学习成果分享给大家。 首先看看教程中提到的经典”生产者-消费者“模型,传统的解决方...
  • sunflowerduidui
  • sunflowerduidui
  • 2016-07-04 12:39:15
  • 2209

Python语言中的协程(生产者-消费者举例)

协程又被称为微线程,它的特点是不需要进行线程的切换,因为整个程序的执行过程中,只有一个线程.没有线程切换的开销,和多线程相比较,线程数量越多,协程的性能就越高.它子程序的执行是由程序自身控制.又由于只...
  • Chen_dSir
  • Chen_dSir
  • 2017-04-30 22:38:52
  • 452

lua和python利用协程实现消费-生产者问题

lua版本:--生产者,消费者模式-- --通过yield,resume配对实现,类似java的wait和notifyfunction send(x) coroutine.yield(x) e...
  • xiangxianghehe
  • xiangxianghehe
  • 2016-12-03 23:26:43
  • 621

python实现生产者消费者并发模型

  • 2016年11月22日 18:48
  • 206KB
  • 下载

Python实现协程的生产者与消费者

Python实现协程的生产者与消费者
  • u012965373
  • u012965373
  • 2016-05-16 17:25:02
  • 1076

消费者&生产者模型的python代码

引言:前几天看了一点InfoQ上大神们很多的总结,服务编程范式以这样的方式进化多进程--->多线程--->非阻塞--->协程。 说说协程,找了一些关于GreenLet的资料,协程也称作微线程,是...
  • huithe
  • huithe
  • 2012-12-08 20:13:13
  • 1286

Python的yield协程机制实现生产者-消费者模式

利用yield的协程机制我们可以轻松地实现生产者-消费者模式:#-*- coding:utf-8 -*-def consumer(): while True: d=yield ...
  • C_MonkeyDream
  • C_MonkeyDream
  • 2016-05-03 14:59:56
  • 969

Lua协程(coroutine)的基本知识

有一个概念叫做coroutine, 也就是协程。协程究竟是什么呢,正式一点的说法: wiki : 协程是一种程序组件,是由子例程(过程、函数、例程、方法、子程序)的概念泛化而来的, ...
  • David_Dai_1108
  • David_Dai_1108
  • 2016-04-21 00:29:43
  • 1108

利用 Python yield 创建协程将异步编程同步化

利用 Python yield 创建协程将异步编程同步化 Python 2015-09-07 08:40:34 发布 您的评价: 0.0 收藏 0收藏 在 Lua 和 Pyt...
  • a675311
  • a675311
  • 2016-11-14 17:57:08
  • 511
收藏助手
不良信息举报
您举报文章:Python初识协程已经最经典的yeild生产者消费者模型
举报原因:
原因补充:

(最多只允许输入30个字)