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中计算三角函数之cos()方法的使用简介
May 15 Python
Python 列表排序方法reverse、sort、sorted详解
Jan 22 Python
Python简单实现TCP包发送十六进制数据的方法
Apr 16 Python
Python 实现数据库更新脚本的生成方法
Jul 09 Python
Python利用itchat对微信中好友数据实现简单分析的方法
Nov 21 Python
Python中使用支持向量机(SVM)算法
Dec 26 Python
微信跳一跳python代码实现
Jan 05 Python
python3 拼接字符串的7种方法
Sep 12 Python
Python调用C++,通过Pybind11制作Python接口
Oct 16 Python
使用Py2Exe for Python3创建自己的exe程序示例
Oct 31 Python
Python数据抓取爬虫代理防封IP方法
Dec 23 Python
python+pygame实现坦克大战
Sep 10 Python
实例详解Python的进程,线程和协程
Python获取指定日期是"星期几"的6种方法
Python+tkinter实现高清图片保存
Python中的 Set 与 dict
Mar 13 #Python
Python echarts实现数据可视化实例详解
分享3个非常实用的 Python 模块
Mar 03 #Python
详解在OpenCV中如何使用图像像素
You might like
第九节 绑定 [9]
2006/10/09 PHP
php5.3中连接sqlserver2000的两种方法(com与ODBC)
2012/12/29 PHP
php 使用file_get_contents读取大文件的方法
2014/11/13 PHP
让GoogleCode的SVN下的HTML文件在FireFox下正常显示.
2009/05/25 Javascript
JQuery 入门实例1
2009/06/25 Javascript
Jquery Ajax学习实例3 向WebService发出请求,调用方法返回数据
2010/03/16 Javascript
jQuery删除一个元素后淡出效果展示删除过程的方法
2015/03/18 Javascript
JavaScript实现添加及删除事件的方法小结
2015/08/04 Javascript
Bootstrap modal使用及点击外部不消失的解决方法
2016/12/13 Javascript
JavaScript箭头函数_动力节点Java学院整理
2017/06/28 Javascript
利用HBuilder打包前端开发webapp为apk的方法
2017/11/13 Javascript
angularjs 获取默认选中的单选按钮的value方法
2018/02/28 Javascript
Vue循环组件加validate多表单验证的实例
2018/09/18 Javascript
微信小程序 checkbox使用实例解析
2019/09/09 Javascript
vue计算属性+vue中class与style绑定(推荐)
2020/03/30 Javascript
原生JS实现京东查看商品点击放大
2020/12/21 Javascript
Python中实现字符串类型与字典类型相互转换的方法
2014/08/18 Python
Python基于DES算法加密解密实例
2015/06/03 Python
PyQt5实现无边框窗口的标题拖动和窗口缩放
2018/04/19 Python
python 获取指定文件夹下所有文件名称并写入列表的实例
2018/04/23 Python
python实现图片文件批量重命名
2020/03/23 Python
django模板加载静态文件的方法步骤
2019/03/01 Python
如何基于python实现脚本加密
2019/12/28 Python
Python+Kepler.gl轻松制作酷炫路径动画的实现示例
2020/06/02 Python
Python文件操作模拟用户登陆代码实例
2020/06/09 Python
Python通过format函数格式化显示值
2020/10/17 Python
matplotlib之多边形选区(PolygonSelector)的使用
2021/02/24 Python
沃达丰英国有限公司:Vodafone英国
2019/04/16 全球购物
美国在线医疗分销商:MedEx Supply
2020/02/04 全球购物
自荐信封面
2013/12/04 职场文书
审计主管岗位职责
2014/01/31 职场文书
简单通用的简历自我评价
2014/09/21 职场文书
努力学习保证书
2015/02/26 职场文书
胡桃夹子观后感
2015/06/11 职场文书
Vertica集成Apache Hudi重磅使用指南
2022/03/31 Servers
选购到合适的激光打印机
2022/04/21 数码科技