首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >asyncio.iscoroutinefunction为异步生成器返回False

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

Stack Overflow用户
提问于 2019-12-15 11:03:15
回答 1查看 1.3K关注 0票数 4

以下异步生成器代码直接从PEP525中删除:

代码语言:javascript
运行
复制
async def gen():
    await asyncio.sleep(0.1)
    v = yield 42
    print(v)
    await asyncio.sleep(0.2)

然而,当我打电话(用python3.6)时:

代码语言:javascript
运行
复制
print(asyncio.iscoroutinefunction(gen), asyncio.iscoroutine(gen))

我得到:

代码语言:javascript
运行
复制
False, False

为什么异步生成器不能识别为协同函数?

还有其他方法可以将其识别为协同函数吗?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2019-12-15 11:18:44

您希望使用inspect.isasyncgenfunction() (以及调用gen()的结果的inspect.isasyncgen() ):

代码语言:javascript
运行
复制
>>> import inspect
>>> print(inspect.isasyncgenfunction(gen), inspect.isasyncgen(gen()))
True True

异步函数和异步生成器函数之间不存在类型层次关系。

另外,asyncio.iscoroutine*()函数存在的唯一原因是支持legacy generator-based @asyncio.coroutine decorator,它不能用于创建异步生成器。如果您不需要支持可能仍然使用这些代码库(比Python3.5更早)的旧代码库,那么我只需要使用inspect.is*()函数。

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/59343239

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档