asyncio异步编程之Task对象详解


Posted in Python onMarch 13, 2022

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)

总结

本篇文章就到这里了,希望能够给你带来帮助,也希望您能够多多关注三水点靠木的更多内容!   

Python 相关文章推荐
python中使用xlrd、xlwt操作excel表格详解
Jan 29 Python
python使用锁访问共享变量实例解析
Feb 08 Python
使用python爬虫获取黄金价格的核心代码
Jun 13 Python
python将txt文件读入为np.array的方法
Oct 30 Python
对python操作kafka写入json数据的简单demo分享
Dec 27 Python
解决Python中pandas读取*.csv文件出现编码问题
Jul 12 Python
python中利用numpy.array()实现俩个数值列表的对应相加方法
Aug 26 Python
在pycharm中配置Anaconda以及pip源配置详解
Sep 09 Python
python烟花效果的代码实例
Feb 25 Python
python实现图像全景拼接
Mar 27 Python
利用Opencv实现图片的油画特效实例
Feb 28 Python
python 制作一个gui界面的翻译工具
May 14 Python
实例详解Python的进程,线程和协程
Python获取指定日期是"星期几"的6种方法
Python+tkinter实现高清图片保存
Python中的 Set 与 dict
Mar 13 #Python
Python echarts实现数据可视化实例详解
分享3个非常实用的 Python 模块
Mar 03 #Python
详解在OpenCV中如何使用图像像素
You might like
php开发留言板的CRUD(增,删,改,查)操作
2012/04/19 PHP
php导入csv文件碰到乱码问题的解决方法
2014/02/10 PHP
php查询ip所在地的方法
2014/12/05 PHP
phpmyadmin提示The mbstring extension is missing的解决方法
2014/12/17 PHP
PHP实现登录搜狐广告获取广告联盟数据的方法【附demo源码】
2016/10/14 PHP
JS使用getComputedStyle()方法获取CSS属性值
2014/04/23 Javascript
jquery实现预览提交的表单代码分享
2014/05/21 Javascript
JS+CSS实现的经典tab选项卡效果代码
2015/09/16 Javascript
原生js模拟淘宝购物车项目实战
2015/11/18 Javascript
分享javascript、jquery实用代码段
2016/10/20 Javascript
vue基于Element构建自定义树的示例代码
2017/09/19 Javascript
vue自定义过滤器创建和使用方法详解
2017/11/06 Javascript
js中call()和apply()改变指针问题的讲解
2019/01/17 Javascript
在React中写一个Animation组件为组件进入和离开加上动画/过度效果
2019/06/24 Javascript
JQuery 实现文件下载的常用方法分析
2019/10/29 jQuery
通过实例解析json与jsonp原理及使用方法
2020/09/27 Javascript
[48:48]VGJ.T vs Liquid 2018国际邀请赛小组赛BO2 第二场 8.19
2018/08/21 DOTA
[43:26]完美世界DOTA2联赛PWL S2 Forest vs Rebirth 第二场 11.20
2020/11/23 DOTA
python批量制作雷达图的实现方法
2016/07/26 Python
python fabric实现远程部署
2017/01/05 Python
浅谈使用Python变量时要避免的3个错误
2017/10/30 Python
python实现数据预处理之填充缺失值的示例
2017/12/22 Python
解决Pycharm中import时无法识别自己写的程序方法
2018/05/18 Python
使用python获取(宜宾市地震信息)地震信息
2019/06/20 Python
用Python生成HTML表格的方法示例
2020/03/06 Python
TensorFlow2.1.0安装过程中setuptools、wrapt等相关错误指南
2020/04/08 Python
美国最大的高尔夫发球时间预订网站:TeeOff.com
2018/03/28 全球购物
俄罗斯运动、健康和美容产品在线商店:Lactomin.ru
2020/07/23 全球购物
String这个类型的class为何定义成final?
2012/11/13 面试题
求职简历中的自我评价分享
2013/12/08 职场文书
开展党的群众路线教育实践活动方案
2014/02/05 职场文书
平安工地建设方案
2014/05/06 职场文书
应用心理学专业求职信
2014/08/04 职场文书
我与祖国共奋进演讲稿
2014/09/13 职场文书
《兰兰过桥》教学反思
2016/02/20 职场文书
Pyhton爬虫知识之正则表达式详解
2022/04/01 Python