【问题标题】:What will happen if you don't await a async function?如果你不等待异步函数会发生什么?
【发布时间】:2020-07-09 13:50:28
【问题描述】:

如果我不使用await 调用异步函数,我会得到一个协程。在那种情况下,协程会发生什么?我必须手动执行协程吗?还是这个协程会在后台继续自己运行?

使用await

async def work():
    result = await stuff()

没有await

async def work():
     result = stuff()

【问题讨论】:

  • 会卡住。始终使用await f() 而不仅仅是f() 是个好主意。
  • 你试过了吗?你得到的例外是信息丰富的。它会告诉你stuff 永远不会被执行。

标签: python async-await python-asyncio coroutine


【解决方案1】:

来自官方文档:

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

这意味着您实际上并没有调用您的函数,因此如果您没有在函数调用之前放置 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())

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2018-12-28
    • 1970-01-01
    • 2016-01-10
    • 2019-04-29
    • 2023-03-13
    • 2019-11-28
    • 1970-01-01
    • 2019-06-16
    相关资源
    最近更新 更多