python asyncio的wait 和 gather

wait 和 gather

两者都是在协程需要并发的时候使用。

  • wait接受一个协程列表,返回done, peding两个集合,done里面是完成任务的协程,pending表示仍在跑的协程,通过协程.result()的方法来获取完成的结果。<coroutine object wait at 0x1095a17c8>

  • gather以gather(cro1, cro2, cro3, cro4…)的方式接受协程,返回的是一个结合了这么多个任务的协程<_GatheringFuture pending>,如果协程有返回值,则会返回协程充公运行之后的结果。

async def func1(num):
    print('--func1 start--')
    await asyncio.sleep(num)
    print('--func1 done--')
    return 'func1 ok'

async def func2(num):
    print('--func2 start--')
    await asyncio.sleep(num)
    print('--func2 done--')
    return 'func2 ok'

async def main():
    task1 = asyncio.ensure_future(func1(3))
    task2 = asyncio.ensure_future(func2(5))
    tasks = [task1, task2]
    res = await asyncio.gather(*tasks)
    return res
    # done, pending = await asyncio.wait(tasks)
    # for t in done:
    #     print(t.result())
    # print(done)
    # print(pending)

if __name__ == '__main__':
    
    loop = asyncio.get_event_loop()
    result = loop.run_until_complete(main())
    print(result)

返回结果

--func1 start--
--func2 start--
--func1 done--
--func2 done--
['func1 ok', 'func2 ok']
建议反复阅读这篇文章:python—异步IO(asyncio)协程
以及这篇:Python黑魔法 — 异步IO( asyncio) 协程
  • 1
    点赞
  • 11
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值