如果不等待异步函数会发生什么?

use*_*968 7 python coroutine async-await python-asyncio

如果我不使用await调用异步函数,我将返回一个协程。那么,协程会发生什么情况呢?我必须手动执行协程吗?或者这个协程将继续在后台运行?

使用await

async def work():
    result = await stuff()
Run Code Online (Sandbox Code Playgroud)

没有await

async def work():
     result = stuff()
Run Code Online (Sandbox Code Playgroud)

kar*_*mad 6

来自官方文档:

请注意,简单地调用协程不会安排其执行:

await这意味着您实际上并没有调用您的函数,因此如果您没有在函数调用之前放置,那么就没有人在等待任何东西,也没有什么可以等待的。

您可以使用以下方法为其安排一个任务或多个任务asyncio

import asyncio

async def main():
    loop = asyncio.get_event_loop()
    t1 = loop.create_task(stuff())
    t2 = loop.create_task(stuff())

loop = asyncio.get_event_loop()
loop.run_until_complete(main())
Run Code Online (Sandbox Code Playgroud)

要了解更多信息,我建议阅读 https://docs.python.org/3/library/asyncio-task.html