博客园  :: 首页  :: 新随笔  :: 联系 :: 订阅 订阅  :: 管理

python coroutine 协程 生成器

Posted on 2017-11-06 14:33  bw_0927  阅读(148)  评论(0)    收藏  举报

什么是Coroutine?

Coroutine,又称作协程。从字面上来理解,即协同运行的例程,它是比是线程(thread)更细量级的用户态线程,特点是允许用户的主动调用和主动退出,挂起当前的例程然后返回值或去执行其他任务,接着返回原来停下的点继续执行。等下,这是否有点奇怪?我们都知道一般函数都是线性执行的,不可能说执行到一半返回,等会儿又跑到原来的地方继续执行。但一些熟悉python(or其他动态语言)的童鞋都知道这可以做到,答案是用yield语句。其实这里我们要感谢操作系统(OS)为我们做的工作,因为它具有getcontextswapcontext这些特性,通过系统调用,我们可以把上下文和状态保存起来,切换到其他的上下文,这些特性为coroutine的实现提供了底层的基础。

 

 

 

在Python的概念中,这里提到的协程就是生成器

 

yield 与 return

在一个生成器中,如果没有return,则默认执行到函数完毕时返回StopIteration

 

如果遇到return,如果在执行过程中 return,则直接抛出 StopIteration 终止迭代

如果在return后返回一个值,那么这个值为StopIteration异常的说明,不是程序的返回值。

生成器没有办法使用return来返回值。