账号密码登录
微信安全登录
微信扫描二维码登录

登录后绑定QQ、微信即可实现信息互通

手机验证码登录
找回密码返回
邮箱找回 手机找回
注册账号返回
其他登录方式
分享
  • 收藏
    X
    关于asyncio 执行过程的问题。内含代码,对执行顺序有点不解
    51
    0
    import asyncio
     
    import time
     
    now = lambda: time.time()
     
    async def do_some_work(x):
        print('Waiting: ', x)
     
        await asyncio.sleep(x)
        return 'Done after {}s'.format(x)
     
    async def main():
        coroutine1 = do_some_work(1)
        coroutine2 = do_some_work(2)
        coroutine3 = do_some_work(4)
     
        tasks = [
            asyncio.ensure_future(coroutine1),
            asyncio.ensure_future(coroutine2),
            asyncio.ensure_future(coroutine3)
        ]
     
        dones, pendings = await asyncio.wait(tasks)
     
        for task in dones:
            print('Task ret: ', task.result())
     
    start = now()
     
    loop = asyncio.get_event_loop()
    loop.run_until_complete(main())
     
    print('TIME: ', now() - start)
    

    执行结果:
    Waiting: 1
    Waiting: 2
    Waiting: 4
    (这里隔了四秒)
    Task ret: Done after 1s
    Task ret: Done after 2s
    Task ret: Done after 4s
    TIME: 4.007018804550171

    代码是网上复制的,不理解的是结果中那个停留了四秒。 按小白的理解,执行到第一个await asyncio.sleep(x)的时候跳 到第二个阻塞了又到第三个,然后第三个阻塞了不是应该跳回第一个吗? 然后跳 回函数内执行FRO循环。会先打印第一个出来 然后两秒后再打印第二个,然后四秒后再打印第四个。
    上面的执行结果变成是等最后一个四秒结束后,一起for出来了。这里不理解? 求大佬解惑

    1
    打赏
    收藏
    点击回答
        全部回答
    • 0
    更多回答
    扫一扫访问手机版

    回答动态

    师傅被妖怪抓走了:发布了悬赏问题火爆全网的“元宇宙”到底是什么?预计能赚取 1积分收益
    酒后略带风情:发布了悬赏问题Android内存中Graphics与Code占用过高预计能赚取 10积分收益
    扛起拖把扫天下:发布了悬赏问题typescript如何导出接口配置?求解,谢谢!预计能赚取 10积分收益
    发布了悬赏问题Vue 如何改变返回页面的路径?如让B页面只能返回到A页面.预计能赚取 11积分收益
    发布了悬赏问题vue H5移动端;底部bottom固定定位,安卓弹起键盘导致页面变形如何解决?预计能赚取 10积分收益
    发布了悬赏问题请问为什么tomcat8.5 GET请求中文正常,POST请求还需要设置UTF-8.预计能赚取 10积分收益
    发布了悬赏问题vue2.5+ts创建以及引入jq的方法预计能赚取 11积分收益
    情场浪女:发布了悬赏问题import ggplot时报错module 'pandas' has no attribute 'tslib'预计能赚取 10积分收益
    见心书画许老师18753375161:发布了悬赏问题echarts3 legend禁止点击事件,允许悬浮事件预计能赚取 11积分收益
    aa_92cb0bd09f:发布了悬赏问题codewar上的一个问题预计能赚取 11积分收益