Python学习笔记:协程
协程:为非抢占式多任务产生子程序的计算机组件,协程允许不同入口点在不同位置暂停或开始执行程序
从技术角度上讲,是一个可以暂停执行的函数,生成器
实现:
1.yield返回
2.send调用
协程的四个状态:
- inspect.getgeneratorstate(···)函数确定,该函数会返回下述字符串的一个
- GEN_CREATED: 等待开始执行
- GEN_RUNNING: 解释器正在执行
- GEN_SUSPENED: 在yield表达式处暂停
- GEN_CLOSED: 执行结束
- next预激(prime)
协程中止:
- 协程中未处理的异常会向上冒泡,传给next 函数或send方法的调用方(即触发协程的对象)
- 停止协程:发送某个哨符值,让协程退出。内置的None和Ellipsis常量经常用作哨符值
yield from
- 调用协程为了得到返回值,协程必须正常中止
- 生成器正常中止会发出StopIteration异常,异常对象的value属性保存返回值
- yield from 从内部捕捉StopIteration异常
委派生成器:
- 包含yield from表达式生成器的函数
- 委派生成器在yield from表达式处暂停,调用方可以直接把数据发给子生成器
- 子生成器在把产出的值发给调用方
- 子生成器在最后,解释器会抛出StopIteration,并且把返回值附加到异常对象上
生成器generator:一边循环一边计算下一个元素的机制/算法
满足三个条件:
1.每次调用都生产出for循环需要的下一个元素
2.如果到达最后一个,输出StopIteration异常
3.可被next调用