在Python中必须将await放在每个异步函数前面有什么意义?

ibr*_*koz 10 python async-await

在Python中,我们await在每个协程对象之前需要一个关键字,以便事件循环调用它。但是当我们放置 时await,它会使调用阻塞。因此,我们最终会做与阻塞方式相同的事情。这样的用途有什么意义呢?

https://www.aeracode.org/2018/02/19/python-async-simplified/

https://stackabuse.com/python-async-await-tutorial/

her*_*ert 9

使用await不会使调用同步。它只是语法糖,使其看起来像“正常”顺序代码。但是,当函数调用的结果被await编辑时,事件循环仍然在后台继续。

例如,以下代码执行foo()两次,这将await产生sleep. 但即使它使用await第二个函数调用也会在第一个函数完成之前执行。IE。它是并行运行的。

import asyncio

async def main():
    print('started')
    await asyncio.gather(
        foo(),
        foo(),
    )

async def foo():
    print('starting foo')
    await asyncio.sleep(0.1)
    print('foo finished.')

asyncio.run(main())
Run Code Online (Sandbox Code Playgroud)

印刷:

started
starting foo
starting foo
foo finished.
foo finished.
Run Code Online (Sandbox Code Playgroud)

  • “平行”具有误导性。你的意思是并发 (2认同)

Mas*_*inn 3

await使调用本地阻塞,但“等待”是通过异步函数(本身正在等待)传输的,这样当它到达反应器时时,整个任务可以移到等待列表中,而可以运行另一个任务。

此外,您不需要await您还可以使用spawn协程(对于一个单独的任务,您可能会或可能不会等待),或者使用“未来组合器”之一(asyncio.gatherasyncio.wait,...)与其他任务同时运行。