Python asyncio:如何安排任务?

Wei*_*ker 5 python python-asyncio

我是 Python asyncio 的新手,我正在做一些实验。我有以下代码:

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())
Run Code Online (Sandbox Code Playgroud)

和输出:

b
a
x
y
Run Code Online (Sandbox Code Playgroud)

我不明白这里的顺序。有人可以帮忙解释一下吗?特别是为什么x出现在b和a之后?

Mic*_*mza 0

特别是为什么x出现在b和a之后?

btask2开始后约1秒后打印main,开始后约2秒后a打印。等待,因此等待大约 2 秒。因此,到完成时, 和都会被打印出来。task1mainawait task1task1await task1ba

(上面的“关于”是故意的......会有变化,但在大多数情况下,它们会很小)