- 3.4.2. 协程对象
3.4.2. 协程对象
Coroutine 对象属于 awaitable 对象。 协程的执行可通过调用 await()
并迭代其结果来进行控制。 当协程结束执行并返回时,迭代器会引发 StopIteration
,该异常的 value
属性将指向返回值。 如果协程引发了异常,它会被迭代器所传播。 协程不应该直接引发未处理的 StopIteration
异常。
协程也具有下面列出的方法,它们类似于生成器的对应方法 (参见 生成器-迭代器的方法)。 但是,与生成器不同,协程并不直接支持迭代。
在 3.5.2 版更改: 等待一个协程超过一次将引发 RuntimeError
。
coroutine.
send
(value)开始或恢复协程的执行。 如果 value 为
None
,则这相当于前往await()
所返回迭代器的下一项。 如果 value 不为None
,此方法将委托给导致协程挂起的迭代器的send()
方法。 其结果(返回值,StopIteration
或是其他异常)将与上述对await()
返回值进行迭代的结果相同。coroutine.
throw
(type[, value[, traceback]])在协程内引发指定的异常。 此方法将委托给导致协程挂起的迭代器的
throw()
方法,如果存在该方法。 否则的话,异常会在挂起点被引发。 其结果(返回值,StopIteration
或是其他异常)将与上述对await()
返回值进行迭代的结果相同。 如果异常未在协程内被捕获,则将回传给调用者。coroutine.
close
()- 此方法会使得协程清理自身并退出。 如果协程被挂起,此方法会先委托给导致协程挂起的迭代器的
close()
方法,如果存在该方法。 然后它会在挂起点引发GeneratorExit
,使得协程立即清理自身。 最后,协程会被标记为已结束执行,即使它根本未被启动。
当协程对象将要被销毁时,会使用以上处理过程来自动关闭。