python - asyncio.iscoroutinefunction 为异步生成器返回 False

标签 python python-3.x python-3.6 python-asyncio

以下异步生成器代码直接从 PEP525 中取出:

async def gen():
    await asyncio.sleep(0.1)
    v = yield 42
    print(v)
    await asyncio.sleep(0.2)

但是当我调用时(使用 python3.6):

print(asyncio.iscoroutinefunction(gen), asyncio.iscoroutine(gen))

我得到:

False, False

为什么异步生成器无法识别为协程函数?

是否有其他方法可以将其识别为协程函数?

最佳答案

您想使用 inspect.isasyncgenfunction() (调用 gen() 的结果为 inspect.isasyncgen()):

>>> import inspect
>>> print(inspect.isasyncgenfunction(gen), inspect.isasyncgen(gen()))
True True

异步函数和异步生成器函数之间没有类型层次关系。

此外,asyncio.iscoroutine*() 函数存在的唯一原因根本 是为了支持 legacy generator-based @asyncio.coroutine decorator ,它不能用于创建异步生成器。如果您不需要支持可能仍在使用那些旧代码库(早于 Python 3.5),我会坚持使用 inspect.is*() 函数。

关于python - asyncio.iscoroutinefunction 为异步生成器返回 False,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59343239/

相关文章:

python - dask.dataframe 上的 WordNetLemmatizer 错误, 'WordNetCorpusReader' 对象没有属性 '_LazyCorpusLoader__args'

Python语音识别产生不好的结果

python - spaCy 2.0 : Save and Load a Custom NER model

python-3.x - Azure函数无法导入某些python包

python - 如何在sql语句的python字符串中使用通配符%

python - 将成员变量添加到 python 列表对象

selenium-webdriver - 在Python3.6( Selenium 模块): ConnectionAbortedError: [WinError 10053] An established connection was aborted by the software in your host machine

python - 无法检索列表推导之外的 itertools 迭代器

python - 使用 Python 绑定(bind)在 Qpid Proton 中设置自定义消息属性

python - 如何让 VSCode 的自动完成功能和 PyCharm 一样强大?