首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >Python异步双等待

Python异步双等待
EN

Stack Overflow用户
提问于 2022-11-03 16:31:06
回答 1查看 40关注 0票数 0

出于某种原因,我需要写一个双await,但我不知道为什么。有人能给我解释一下吗?

我创建了一个小例子来说明我遇到的问题。

代码语言:javascript
运行
复制
import asyncio
from random import randint

async def work():
    return randint(1, 100)

async def page():
    return asyncio.gather(*[
        work()
        for _ in range(10)
    ])

async def run():
    results = await (await page())
    return max(list(results))

result = asyncio.run(run())

这是线results = await (await page())

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2022-11-03 17:03:57

要实际执行可使用的对象,需要对它们进行await

这里的page是coroutine函数,当被调用时,它返回一个coroutine,它是一个可接受的对象!

当你说await page()的时候,你是在运行它的身体。执行后,它会给您(return)另一个可访问的对象,它是调用asyncio.gather()的结果。所以你也需要在这个问题上做await。这就是为什么你需要两个await

如果你不这么做,你会发现:

代码语言:javascript
运行
复制
RuntimeError: await wasn't used with future

您可以在调用协同线中执行这个嵌套的等待表达式:

代码语言:javascript
运行
复制
import asyncio
from random import randint


async def work():
    return randint(1, 100)


async def page():
    return await asyncio.gather(*[work() for _ in range(10)])


async def run():
    results = await page()
    return max(list(results))


result = asyncio.run(run())
print(result)
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/74306518

复制
相关文章

相似问题

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