赞
踩
gather 比 wait 更加高层。gather 可以将任务分组,一般优先使用 gather。在某些定制化任务需求的时候,会使用 wait。
# coding=utf-8 import asyncio import time async def step1 (n, start): try: await asyncio.sleep(n) print("第一阶段完成") print("此时用时", time.time() - start) return n except asyncio.CancelledError: print(f"数字{n}被取消") raise async def step2 (n, start): try: await asyncio.sleep(n) print("第二阶段完成") print("此时用时", time.time() - start) return n except asyncio.CancelledError: print(f"数字{n}被取消") raise async def main (): now = time.time() tasks = [ step1(5, now), step2(2, now) ] # 1.gather并发:gather通常被用来阶段性的一个操作,做完第一步才能做第二步 # result = await asyncio.gather(*tasks) # for i in result: # print(i) # 2.wait并发:阻塞式并行,大于最大的阻塞时间-------------------------- # timeout:超时时间 # complete, pending = await asyncio.wait(tasks) # for i in complete: # print(i.result()) # if pending: # print("取消未完成的任务") # for p in pending: # p.cancel() print("总用时", time.time() - now) if __name__ == '__main__': loop = asyncio.get_event_loop() try: loop.run_until_complete(main()) finally: loop.close()
第二阶段完成
此时用时 2.002824068069458
第一阶段完成
此时用时 4.991272926330566
5
2
总用时 4.991272926330566
第二阶段完成
此时用时 2.000105619430542
第一阶段完成
此时用时 5.000672817230225
2
5
总用时 5.000672817230225
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。