python3.6协程出现乱序

代码如下

import asyncio

async def Test(name):
    for n in range(5):
        print (name, " before ", n)
        await asyncio.sleep(1)
        print (name, n, " after ")

loop = asyncio.get_event_loop()
tasks = [Test(n) for n in list('abcdefghijklm')]
loop.run_until_complete(asyncio.wait(tasks))
loop.close()

照理说协程不是应该按顺序执行的吗?我对协程的理解是,代码运行到await asyncio.sleep(1)时候出现了IO阻塞(假设),这时候解释器就会扭头去执行Test('b')丫,Test('c')等接下来的都如此,然后等到阻塞结束后,才会去after那一句代码。就是说,所有的一切都应该是按顺序执行的丫。可是为什么会出现下面的结果呢?

这是刚启动时的输出

before

这是结束时的输出

after

为什么输出结果都是乱序的丫???谢谢大家了。用的是ipython,如果用python自带的,输出会更加乱序。

阅读 3.8k
1 个回答
撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题