python中coroutine和generator的异同

所谓的coroutine,也就是一个包含有yield关键字的函数,但是跟Generator不同的是,coroutine会以value = yield from ...或者 value = await ...的方式使用yield关键字,并且接受调用者通过send(value)函数发送过来的数据,然后消费这个数据(consume the value)。

在使用coroutine,有一点很需要注意的就是:所有的coroutine必须要先调用.next()或者send(None)才行。在调用send传入非None值前,生成器必须处于挂起状态,否则将抛出异常。当然,也可以使用.next()恢复生成器,只不过此时coroutine接收到的value为None。

可以调用.close()关闭coroutine。关闭coroutine之后,再次调用.nect()或者.send(value)之后会抛出异常。

coroutine可以很方便的挂起和执行,也有多个人口点和出口点,而普通的函数一般只有一个入口点和出口点。



Generator和coroutine用起来很像,但是仅此而已,Generator和coroutine是两个完全不相同的概念。Generator产生(返回)数据用来在迭代(iterator)中使用,而coroutine则是需要其他的地方发送数据过来,从而消费数据(consume value)。


猜你喜欢

转载自blog.csdn.net/bird333/article/details/80657487