异步上下文中的Python协程/生成器术语

问题描述 投票:1回答:1

从网络上说

[当您在Python中具有异步函数(协程)时,可以使用async def对其进行声明,这会更改其调用行为。特别是,调用它会立即返回一个协程对象,该对象基本上说:“我可以使用调用的参数来运行协程,并在等待我时返回结果”]

因此,当您不等待而调用async函数时,将返回一个协程。

为什么我要返回一个协程,为什么不只是一个generator?因为我不会在将来发送任何输入。

python async-await generator python-asyncio coroutine
1个回答
0
投票

协程最初在Python 3.4中出现时,它们是使用生成器实现的:

import asyncio
from typing import Generator


@asyncio.coroutine
def test1():
    pass


assert isinstance(test1(), Generator)

不是因为协程始终应该是生成器,只是发生了,它们是:这是实现它们的最方便的方法。


[从Python 3.5coroutines got their new syntaxasync def / await开始,这不仅更干净,而且还有助于将抽象(协程)与其实现细节(生成器)区分开。

似乎还对新型协程进行了修补,以表明不应将它们视为生成器:

async def test2():
    pass


assert not isinstance(test2(), Generator)

长话短说:与协程打交道时,请不要考虑生成器。如果您使用像协程这样的asyncio的抽象,则应该使用它们而不是它们的实现细节。

© www.soinside.com 2019 - 2024. All rights reserved.