【发布时间】:2018-04-17 15:50:43
【问题描述】:
为什么我们需要asyncio.coroutine 装饰器?它提供什么功能?
例如:
# import asyncio
# @asyncio.coroutine
def gen():
value = yield("Started")
print(value)
a = gen()
a.send(None)
a.send("Done")
现在,如果我取消前两行的注释并使用 asyncio.coroutine 装饰器,我仍然会得到相同的输出。
我的意思是这已经是一个coroutine - 一个可以暂停并通过参数传入的函数。为什么我需要用另一个coroutine 即asyncio.coroutine 来装饰它?
【问题讨论】:
-
async def和await语法直到 3.5 才可用,而asyncio在 3.4 中正式引入... -
现在我不确定你在问什么......你有一个正常的生成器函数,你可以将数据发送回 - 你已经能够在任何 asyncio 之前做到这一点完全...
-
您可以将它们用作异步事件循环的一部分并让它们相互等待/睡眠/取消等...如果您熟悉扭曲,那么将
asyncioIO 视为做同样事情的基础(没有所有现成的反应器和协议)...可能值得阅读教程或基本示例并从那里获取... -
在您的示例中,您不需要装饰器。它一无所获。只有在定义将传递给事件循环的协程时才使用它。即使这样,如果您的代码要在 3.4 上运行,您也只想使用装饰器;从 3.5 开始,您可以使用
async def。 -
我强烈建议您查看 asyncio 源代码以尝试理解这些内容(尤其是
asyncio/coroutines.py)。看起来文档和解释在查看代码后更加清晰(就像代码是解释的文档......)。
标签: python python-asyncio coroutine