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环境下安装使用异步任务队列包Celery的基础教程
May 07 Python
python 根据正则表达式提取指定的内容实例详解
Dec 04 Python
python去掉行尾的换行符方法
Jan 04 Python
python编程之requests在网络请求中添加cookies参数方法详解
Oct 25 Python
Python使用pip安装pySerial串口通讯模块
Apr 20 Python
解决Tensorflow使用pip安装后没有model目录的问题
Jun 13 Python
python 剪切移动文件的实现代码
Aug 02 Python
Python3 安装PyQt5及exe打包图文教程
Jan 08 Python
python实现五子棋小程序
Jun 18 Python
Python 实现PS滤镜中的径向模糊特效
Dec 03 Python
python openssl模块安装及用法
Dec 06 Python
python装饰器代码解析
Mar 23 Python
实例详解Python的进程,线程和协程
Python获取指定日期是"星期几"的6种方法
Python+tkinter实现高清图片保存
Python中的 Set 与 dict
Mar 13 #Python
Python echarts实现数据可视化实例详解
分享3个非常实用的 Python 模块
Mar 03 #Python
详解在OpenCV中如何使用图像像素
You might like
PHP PDOStatement:bindParam插入数据错误问题分析
2013/11/13 PHP
解决laravel groupBy 对查询结果进行分组出现的问题
2019/10/09 PHP
javascript 获取页面的高度及滚动条的位置的代码
2010/05/06 Javascript
基于jquery的实现简单的表格中增加或删除下一行
2010/08/01 Javascript
javascript获取选中的文本的方法代码
2013/10/30 Javascript
JavaScript中具名函数的多种调用方式总结
2014/11/08 Javascript
关于延迟加载JavaScript
2015/05/05 Javascript
JavaScript:Array类型全面解析
2016/05/19 Javascript
jQuery插件FusionCharts绘制2D环饼图效果示例【附demo源码】
2017/04/10 jQuery
详解如何使用Node.js编写命令工具——以vue-cli为例
2017/06/29 Javascript
Three.js实现浏览器变动时进行自适应的方法
2017/09/26 Javascript
jquery+css3实现熊猫tv导航代码分享
2018/02/12 jQuery
JavaScript生成一个不重复的ID的方法示例
2019/09/16 Javascript
vue iview实现动态新增和删除
2020/06/17 Javascript
Python 反转字符串(reverse)的方法小结
2018/02/20 Python
Python将DataFrame的某一列作为index的方法
2018/04/08 Python
Python读写zip压缩文件的方法
2018/08/29 Python
python代码实现逻辑回归logistic原理
2019/08/07 Python
Python 利用高德地图api实现经纬度与地址的批量转换
2019/08/14 Python
ansible动态Inventory主机清单配置遇到的坑
2020/01/19 Python
详解pandas绘制矩阵散点图(scatter_matrix)的方法
2020/04/23 Python
如何使用python的ctypes调用医保中心的dll动态库下载医保中心的账单
2020/05/24 Python
css3实现平移效果(transfrom:translate)的示例
2020/11/13 HTML / CSS
整理HTML5中支持的URL编码与字符编码
2016/02/23 HTML / CSS
教你怎样写好自我评价
2013/10/05 职场文书
个人现实表现材料
2014/02/04 职场文书
工程专业求职自荐书范文
2014/02/18 职场文书
自我鉴定书
2014/03/24 职场文书
好学生评语大全
2014/05/05 职场文书
思想政治表现评语
2015/01/04 职场文书
简爱电影观后感
2015/06/10 职场文书
傲慢与偏见电影观后感
2015/06/10 职场文书
Django使用echarts进行可视化展示的实践
2021/06/10 Python
oracle重置序列从0开始递增1
2022/02/28 Oracle
开发者首先否认《遗弃》被取消的传言
2022/04/11 其他游戏
JavaScript parseInt0.0000005打印5原理解析
2022/07/23 Javascript