出于某种原因,我需要写一个双await
,但我不知道为什么。有人能给我解释一下吗?
我创建了一个小例子来说明我遇到的问题。
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())
。
发布于 2022-11-03 17:03:57
要实际执行可使用的对象,需要对它们进行await
。
这里的page
是coroutine函数,当被调用时,它返回一个coroutine,它是一个可接受的对象!
当你说await page()
的时候,你是在运行它的身体。执行后,它会给您(return
)另一个可访问的对象,它是调用asyncio.gather()
的结果。所以你也需要在这个问题上做await
。这就是为什么你需要两个await
。
如果你不这么做,你会发现:
RuntimeError: await wasn't used with future
您可以在调用协同线中执行这个嵌套的等待表达式:
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)
https://stackoverflow.com/questions/74306518
复制相似问题