美文网首页
生成器到协程

生成器到协程

作者: 低吟浅唱1990 | 来源:发表于2019-03-06 22:42 被阅读0次
def simple_coroutine():
    print('->coroutine started')
    x = yield
    print('-> coroutine received:',x*2)
>>>my_coro = simple_coroutine()
>>>my_coro
>>><generator object simple_coroutine at 0x000000000068A2B0>
>>>next(my_coro)
->coroutine started
>>>my_coro.send(42)
-> coroutine received: 84
程序会在yield处挂起,产出None值 因为yield关键字右边没有表达式
from inspect import getgeneratorstate  #执行过程中的状态显示
def simple_coro2(a):
    print('-> Started:a=',a)
    b = yield a
    print('-> Received: b = ',b)
    c = yield a + b
    print('-> Received: c = ',c)
my_coro2 = simple_coro2(14)
getgeneratorstate(my_coro2)
next(my_coro2)
getgeneratorstate(my_coro2)
my_coro2.send(28)
my_coro2.send(99)
-> Started:a= 14
-> Received: b =  28
-> Received: c =  99
协程在yield关键字所在的位置暂停执行。在赋值语句中, = 右边的代码在赋值之前执行。因此,对于 b = yield a 这行代码来说。等到客户端再激活协程时才会设定b的值。
image.png
def averager():
    total = 0.0 
    count = 0
    averager = None
    while True:
        term = yield averager #yield 表达式用于暂停执行协程, 把结果发给调用方; 还用于接收调用方后面发给协程的值, 恢复无限循环。
        total += term
        count += 1
        averager = total/count
>>>coro_avg = averager()  #创建协程
>>>next(coro_avg)    # 调用next 预激协程
>>>print(coro_avg.send(18))  # 计算平均值
>>>18
>>>print(coro_avg.send(30))
>>>24
>>>coro_avg.close()  #停止

协程预激

相关文章

  • 【python】协程:协程与生成器的对比、激活协程、终止协程和异

    基于生成器的协程 生成器可以作为协程(coroutine)使用,称为 "基于生成器的协程"。协程和生成器类似,都是...

  • 协程

    作为协程的生成器 协程使用生成器函数定义 如果协程只需从客户接收数据,那么yield右边没有关键字,产出为隐式指定...

  • 生成器

    一. 生成器的启动方式 协程的内部是用生成器实现的, 学好了生成器会更加理解协程的原理 二. 生成器的close方...

  • Python协程

    最近对Python中的协程挺感兴趣,这里记录对协程的个人理解。 要理解协程,首先需要知道生成器是什么。生成器其实就...

  • Python协程

    目录:一、基于生成器的协程二、协程状态三、协程预激装饰器四、终止协程和异常处理五、协程返回值六、yield fro...

  • Python中协程(coroutine)和生成器(generat

    协程和生成器都使用yield关键字。但是协程更像是对生成器语法的一些扩展 在生成器中, yield 只对外产出值 ...

  • 生成器到协程

    协程预激

  • Python 高级 7

    迭代、迭代器、生成器、协程、yield、greenlet、gevent、进程线程协程对比、gevent多任务图片下...

  • python 协程

    python 协程 生成器转协程 先看下面例子,我们根据此例子分析: 首先,test是我们定义的一个生成器,定义体...

  • 听说过python协程没?听说过 asyncio 库没?都在这一

    python 中协程概念是从 3.4 版本增加的,但 3.4 版本采用是生成器实现,为了将协程和生成器的使用场景进...

网友评论

      本文标题:生成器到协程

      本文链接:https://www.haomeiwen.com/subject/oltguqtx.html