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 网络编程起步(Socket发送消息)
Sep 06 Python
Python实现计算文件夹下.h和.cpp文件的总行数
Apr 23 Python
对Tensorflow中的矩阵运算函数详解
Jul 27 Python
Python面向对象程序设计中类的定义、实例化、封装及私有变量/方法详解
Feb 28 Python
Python小白必备的8个最常用的内置函数(推荐)
Apr 03 Python
Python面向对象程序设计类的封装与继承用法示例
Apr 12 Python
Python向excel中写入数据的方法
May 05 Python
python解释器spython使用及原理解析
Aug 24 Python
Python使用matplotlib绘制三维参数曲线操作示例
Sep 10 Python
python GUI库图形界面开发之PyQt5访问系统剪切板QClipboard类详细使用方法与实例
Feb 27 Python
python 爬虫请求模块requests详解
Dec 04 Python
聊聊Python中关于a=[[]]*3的反思
Jun 02 Python
实例详解Python的进程,线程和协程
Python获取指定日期是"星期几"的6种方法
Python+tkinter实现高清图片保存
Python中的 Set 与 dict
Mar 13 #Python
Python echarts实现数据可视化实例详解
分享3个非常实用的 Python 模块
Mar 03 #Python
详解在OpenCV中如何使用图像像素
You might like
天津市收音机工业发展史
2021/03/04 无线电
PHP提取字符串中的图片地址[正则表达式]
2011/11/12 PHP
PHP提示Deprecated: mysql_connect(): The mysql extension is deprecated的解决方法
2014/08/28 PHP
javascript或asp实现的判断身份证号码是否正确两种验证方法
2009/11/26 Javascript
学习javascript,实现插入排序实现代码
2011/07/31 Javascript
JavaScript 类型的包装对象(Typed Wrappers)
2011/10/27 Javascript
input点击后placeholder中的提示消息消失
2016/01/15 Javascript
jquery遍历json对象集合详解
2016/05/18 Javascript
JS调用某段SQL语句的方法
2016/10/20 Javascript
js控制台输出的方法(详解)
2016/11/26 Javascript
bootstrap 弹出框modal添加垂直方向滚轴效果
2018/07/09 Javascript
详解基于node.js的脚手架工具开发经历
2019/01/28 Javascript
VUE+elementui面包屑实现动态路由详解
2019/11/04 Javascript
jquery实现有过渡效果的tab切换
2020/07/17 jQuery
[04:50]DOTA2亚洲邀请赛小组赛第四日 TOP10精彩集锦
2015/02/02 DOTA
python实现进程间通信简单实例
2014/07/23 Python
Python中字典创建、遍历、添加等实用操作技巧合集
2015/06/02 Python
详解Python如何获取列表(List)的中位数
2016/08/12 Python
windows下python连接oracle数据库
2017/06/07 Python
Python用Pillow(PIL)进行简单的图像操作方法
2017/07/07 Python
Python正则匹配判断手机号是否合法的方法
2020/12/09 Python
python 定时器,实现每天凌晨3点执行的方法
2019/02/20 Python
深入浅析css3 中display box使用方法
2015/11/25 HTML / CSS
html5清空画布方法(三种)
2017/10/16 HTML / CSS
英国Amara家居法国网站:家居装饰,现代装饰和豪华礼品
2016/12/15 全球购物
老师的检讨书
2014/02/23 职场文书
yy婚礼主持词
2014/03/14 职场文书
大三学习计划书范文
2014/05/02 职场文书
祖国在我心中的演讲稿
2014/05/04 职场文书
2014党员批评和自我批评思想汇报
2014/09/21 职场文书
教师党的群众路线教育实践活动个人整改措施
2014/11/04 职场文书
义诊活动通知
2015/04/24 职场文书
golang在GRPC中设置client的超时时间
2021/04/27 Golang
MySQL下使用Inplace和Online方式创建索引的教程
2021/05/26 MySQL
Python+OpenCV实现图片中的圆形检测
2022/04/07 Python
GTX1660显卡搭配显示器推荐
2022/04/19 数码科技