如何在Python中“等待”代码流?这是清除我问题的密码。
import asyncio
async def io_related(name):
print(f'{name} started')
await asyncio.sleep(0.1)
print(f'{name} finished')
async def main():
await asyncio.gather(
io_related('1'),
io_related('2'),
io_related('3'),
io_related('4'),
)
loop = asyncio.get_event_loop()
loop.run_until_complete(main())我得到了这个输出:
"1开始
2开始
3开始
4开始
1完成
3完成
2完成
4完成“
为什么"3“在"2”之前完成?。代码是如何运行的?我试着把"1“、"2”、"3“放在”等待asyncio.gather“中。它的工作,如我所预期的,但在项目"4“之后,事情的顺序”完成“是混乱的可怕。
发布于 2020-03-19 00:35:09
这是一个关于线程/异步编程如何工作的问题。异步方法都将在同一时间启动,但只要数据返回就会结束。
这里的等待只是一个关键词,“嘿,等这些都回来再继续”。
所以,把它想象成加载网页更好。如果您同时调用google.com、microsoft.com、netflix.com和stackoverflow.com,则可以合理地预期它们可能不会按照调用它们的顺序返回页面。这将取决于这个问题范围之外的几件事。
这里的关键点是,当您开始使用异步方法时,您不能期望结果按照您所调用的顺序返回。
https://stackoverflow.com/questions/60749187
复制相似问题