大蟒蛇python教程共享asyncio异步编程之Task对象详解

1.task对象的作用

可以将多个任务添加到事件循环当中,达到多任务并发的效果

2.如何创建task对象

asyncio.create_task(协程对象)

注意create_task只有在python3.7及以后的版本中才可以使用,就像asyncio.run()一样,

在3.7以前可以使用asyncio.ensure_future()方式创建task对象

3.示例一(目前不推荐这种写法)

async def func():      print(1)      await asyncio.sleep(2)      print(2)      return "test"  async def main():      print("main start")      # python 3.7及以上版本的写法      # task1 = asyncio.create_task(func())      # task2 = asyncio.create_task(func())      # python3.7以前的写法      task1 = asyncio.ensure_future(func())      task2 = asyncio.ensure_future(func())      print("main end")      ret1 = await task1      ret2 = await task2      print(ret1, ret2)  # python3.7以后的写法  # asyncio.run(main())  # python3.7以前的写法  loop = asyncio.get_event_loop()  loop.run_until_complete(main())  """  在创建task的时候,就将创建好的task添加到了时间循环当中,所以说必须得有时间循环,才可以创建task,否则会报错  """

4.示例2

async def func1():      print(1111)      await asyncio.sleep(2)      print(2222)      return "test"  async def main1():      print("main start")      tasks = [          asyncio.ensure_future(func1()),          asyncio.ensure_future(func1())      ]      print("main end")      # 执行成功后结果在done中, wait中可以加第二个参数timeout,如果在超时时间内没有完成,那么pending就是未执行完的东西      done, pending = await asyncio.wait(tasks, timeout=1)      print(done)      #print(pending)  # python3.7以前的写法  loop = asyncio.get_event_loop()  loop.run_until_complete(main1())

5.示例3(算是以上示例2的简化版)

"""  方式二的简化版,就是tasks中不直接添加task,而是先将协程对象加入到list中,在最后运行中添加  """  async def func2():      print(1111)      await asyncio.sleep(2)      print(2222)      return "test"  tasks = [      func2(),      func2()  ]  # python3.7以前的写法  loop = asyncio.get_event_loop()  done, pending = loop.run_until_complete(asyncio.wait(tasks))  print(done)  print(pending)

总结

本篇文章就到这里了,希望能够给你带来帮助,也希望您能够多多关注<计算机技术网(www.ctvol.com)!!>的更多内容!   

需要了解更多python教程分享asyncio异步编程之Task对象详解,都可以关注python教程分享栏目—计算机技术网(www.ctvol.com)!

本文来自网络收集,不代表计算机技术网立场,如涉及侵权请联系管理员删除。

ctvol管理联系方式QQ:251552304

本文章地址:https://www.ctvol.com/pythontutorial/1068401.html

(0)
上一篇 2022年3月27日
下一篇 2022年3月27日

精彩推荐