【流畅的python】16 - 协程

yield

 

产生是产生值给调用方

让步是暂停生成器,同时让步也可以作为流程控制手段

1 yield item

上面这行代码会产出一个值。提供给next(...)的调用方。此外还会做出让步,暂停执行生成器,让调用方工作。直到需要下一个值时再调用next(),调用方再次会从生成器中拉取值。

yield关键字也可以不接收值或者传出值,它可以只做流程控制之用

协程

 协程和生成器从句法上看很相似,都是定义体中包含yield关键字的函数。不过在协程中yield通常出现在表达式的右侧,如下:

1 item = yield

可以产出值,也可以不产出值,如果yield后面没有表达式,那么生成器产出None。

协程可能会从调用方接收数据,不过调用方把数据提供给协程使用的是.send(value)方法,而不是next(...)函数。通常,调用方会把值推送给协程。

使用yield可以实现协作式多任务:协程可以把控制器让步给中心调度程序,从而激活其他的协程。

 

本章要介绍的内容:

  • 生产器作为协程使用时的行为和状态
  • 使用装饰器自动预激协程
  • 调用方如何用生成器对象的.close()和.throw()方法控制协程
  • 协程终止时如何返回值
  • yield from新句法的用途和定义
  • 使用协程管理仿真系统中的并发活动
posted @ 2019-10-11 23:21  #adapt#  阅读(172)  评论(0编辑  收藏  举报