ibr*_*koz 10 python async-await
在Python中,我们await在每个协程对象之前需要一个关键字,以便事件循环调用它。但是当我们放置 时await,它会使调用阻塞。因此,我们最终会做与阻塞方式相同的事情。这样的用途有什么意义呢?
https://www.aeracode.org/2018/02/19/python-async-simplified/
使用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)
await使调用本地阻塞,但“等待”是通过异步函数(本身正在等待)传输的,这样当它到达反应器时时,整个任务可以移到等待列表中,而可以运行另一个任务。
此外,您不需要,await您还可以使用spawn协程(对于一个单独的任务,您可能会或可能不会等待),或者使用“未来组合器”之一(asyncio.gather,asyncio.wait,...)与其他任务同时运行。
| 归档时间: |
|
| 查看次数: |
7733 次 |
| 最近记录: |