python3.6协程出现乱序

发布于 2022-09-06 02:30:57 字数 943 浏览 12 评论 0

代码如下

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自带的,输出会更加乱序。

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

指尖上的星空 2022-09-13 02:30:57

协程中的执行顺序是不确定
https://stackoverflow.com/que...

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文