I'm new to Python asyncio and I'm doing some experiments. I have the following code:
async def say_after(n, s):
await asyncio.sleep(n)
print(s)
async def main():
task1 = asyncio.create_task(say_after(2, 'a'))
task2 = asyncio.create_task(say_after(1, 'b'))
await task1
print('x', flush=True)
await task2
print('y', flush=True)
asyncio.run(main())
And the output:
b
a
x
y
I don't understand the order here. Can someone help explain? Especially why x comes after b and a?
Especially why x comes after b and a?
b is printed in task2 about 1 second after the start of main, and a is printed in task1 about 2 seconds after the start of main. The await task1 waits for task1, and so waits about 2 seconds. So by the time await task1 completes, both b and a would have been printed.
(The "about"s in the above are deliberate... there would be variations, but in most situations, they would be small)