python 协程简介

协程简介:

字典为动词“to yield”给出了两个释义:产出和让步。对于Python 生成器中的 yield 来 说,这两个含义都成立。yield item 这行代码会产出一个值,提供给 next(...) 的调用方; 此外,还会作出让步,暂停执行生成器,让调用方继续工作,直到需要使用另一个值时再 调用 next()。调用方会从生成器中拉取值。

从句法上看,协程与生成器类似,都是定义体中包含 yield 关键字的函数。可是,在协程 中,yield 通常出现在表达式的右边(例如,datum = yield),可以产出值,也可以不产 出——如果 yield 关键字后面没有表达式,那么生成器产出 None。协程可能会从调用方接 收数据,不过调用方把数据提供给协程使用的是 .send(datum) 方法,而不是 next(...) 函 数。通常,调用方会把值推送给协程。

yield 关键字甚至还可以不接收或传出数据。不管数据如何流动,yield 都是一种流程控制 工具,使用它可以实现协作式多任务:协程可以把控制器让步给中心调度程序,从而激活 其他的协程。

从根本上把 yield 视作控制流程的方式,这样就好理解协程了。

生成器如何进化成协程:

协程的底层架构在“PEP 342—Coroutines via Enhanced Generators”中定义,并在 Python 2.5(2006 年)实现了。自此之后,yield 关 键字可以在表达式中使用,而且生成器 API 中增加了 .send(value) 方法。生成器的调用方 可以使用 .send(...) 方法发送数据,发送的数据会成为生成器函数中 yield 表达式的值。 因此,生成器可以作为协程使用。协程是指一个过程,这个过程与调用方协作,产出由调 用方提供的值。

除了 .send(...) 方法,PEP 342 还添加了 .throw(...).close() 方法:前者的作用是让 调用方抛出异常,在生成器中处理;后者的作用是终止生成器

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值