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实现图片变亮或者变暗的方法
Jun 01 Python
带你了解python装饰器
Jun 15 Python
Python获取当前公网ip并自动断开宽带连接实例代码
Jan 12 Python
Python脚本按照当前日期创建多级目录
Mar 01 Python
python 并发编程 多路复用IO模型详解
Aug 20 Python
Python中生成一个指定长度的随机字符串实现示例
Nov 06 Python
Python基础之列表常见操作经典实例详解
Feb 26 Python
Python3 获取文件属性的方式(时间、大小等)
Mar 12 Python
openCV提取图像中的矩形区域
Jul 21 Python
python-图片流传输的思路及示例(url转换二维码)
Dec 21 Python
python re模块常见用法例举
Mar 01 Python
pytorch--之halfTensor的使用详解
May 24 Python
实例详解Python的进程,线程和协程
Python获取指定日期是"星期几"的6种方法
Python+tkinter实现高清图片保存
Python中的 Set 与 dict
Mar 13 #Python
Python echarts实现数据可视化实例详解
分享3个非常实用的 Python 模块
Mar 03 #Python
详解在OpenCV中如何使用图像像素
You might like
PHP面向对象编程快速入门
2006/10/09 PHP
关于PHP结束标签的使用细节探讨及联想
2013/03/04 PHP
PHP实现的简单缓存类
2015/07/29 PHP
是 WordPress 让 PHP 更流行了 而不是框架
2016/02/03 PHP
让textarea自动调整大小的js代码
2011/04/12 Javascript
国外大牛IE版本检测!现在IE都到9了,IE检测代码
2012/01/04 Javascript
Jquery实现搜索框提示功能示例代码
2013/08/13 Javascript
JavaScript动态插入script的基本思路及实现函数
2013/11/11 Javascript
node.js中的buffer.fill方法使用说明
2014/12/14 Javascript
jQuery中的jQuery()方法用法分析
2014/12/27 Javascript
JavaScript中操作字符串小结
2015/05/04 Javascript
Nodejs express框架一个工程中同时使用ejs模版和jade模版
2015/12/28 NodeJs
JavaScript中子对象访问父对象的方式详解
2016/09/01 Javascript
Vue.js开发环境快速搭建教程
2017/03/17 Javascript
Angular 4依赖注入学习教程之Injectable装饰器(六)
2017/06/04 Javascript
详解vue+vueRouter+webpack的简单实例
2017/06/17 Javascript
关于JavaScript中的this指向问题总结篇
2017/07/23 Javascript
vue+vue-router转场动画的实例代码
2018/09/01 Javascript
JavaScript Array对象基本方法详解
2019/09/03 Javascript
vue分页插件的使用方法
2019/12/25 Javascript
python实现给微信公众号发送消息的方法
2017/06/30 Python
Python实现计算圆周率π的值到任意位的方法示例
2018/05/08 Python
matplotlib实现热成像图colorbar和极坐标图的方法
2018/12/13 Python
关于不懂Chromedriver如何配置环境变量问题解决方法
2019/06/12 Python
python实现身份证实名认证的方法实例
2019/11/08 Python
基于Python爬取京东双十一商品价格曲线
2020/10/23 Python
纯CSS3实现的8种Loading动画效果
2014/07/05 HTML / CSS
英国奢侈品概念店:Base Blu
2019/05/16 全球购物
大学生自我评价怎样写好
2013/10/23 职场文书
一封普通求职者的求职信
2013/11/20 职场文书
《美丽的彩虹》教学反思
2014/02/25 职场文书
软件专业毕业生个人自我鉴定
2014/04/17 职场文书
团日活动总结书
2014/05/08 职场文书
作风建设演讲稿
2014/05/23 职场文书
九一八事变演讲稿范文
2014/09/14 职场文书
商家认证委托书格式
2014/10/16 职场文书