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中输出ASCII大文字、艺术字、字符字小技巧
Apr 28 Python
python实现数组插入新元素的方法
May 22 Python
浅谈python中截取字符函数strip,lstrip,rstrip
Jul 17 Python
深入理解 Python 中的多线程 新手必看
Nov 20 Python
Python tkinter模块弹出窗口及传值回到主窗口操作详解
Jul 28 Python
python 实现敏感词过滤的方法
Jan 21 Python
Python 通过requests实现腾讯新闻抓取爬虫的方法
Feb 22 Python
Python字符串通过'+'和join函数拼接新字符串的性能测试比较
Mar 05 Python
Python+OpenCv制作证件图片生成器的操作方法
Aug 21 Python
Python实现隐马尔可夫模型的前向后向算法的示例代码
Dec 31 Python
关于python 跨域处理方式详解
Mar 28 Python
详解Python中*args和**kwargs的使用
Apr 07 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/03 咖啡文化
php懒人函数 自动添加数据
2011/06/28 PHP
关于Sphinx创建全文检索的索引介绍
2013/06/25 PHP
php基本函数汇总
2015/07/09 PHP
实例讲解yii2.0在php命令行中运行的步骤
2015/12/01 PHP
thinkPHP模型初始化实例分析
2015/12/03 PHP
在Mac OS上搭建PHP的Yii框架及相关测试环境
2016/02/14 PHP
php metaphone()函数及php localeconv() 函数实例解析
2016/05/15 PHP
PHP实现时间比较和时间差计算的方法示例
2017/07/24 PHP
Laravel框架实现定时Task Scheduling例子
2019/10/22 PHP
jQuery 方法大全方便学习参考
2010/02/25 Javascript
JQUERY获取form表单值的代码
2010/07/17 Javascript
用jquery实现自定义风格的滑动条实现代码
2011/04/26 Javascript
动态加载jquery库的方法
2014/02/12 Javascript
详谈nodejs异步编程
2014/12/04 NodeJs
JS长整型精度问题实例分析
2015/01/13 Javascript
纯js模拟div层弹性运动的方法
2015/07/27 Javascript
Javascript生成带参数的二维码示例
2016/10/10 Javascript
js实现各种复制到剪贴板的方法(分享)
2016/10/27 Javascript
AngularJS实现表单验证功能详解
2017/10/12 Javascript
Angular弹出模态框的两种方式
2017/10/19 Javascript
JavaScript框架Angular和React深度对比
2017/11/20 Javascript
Vue2.0实现调用摄像头进行拍照功能 exif.js实现图片上传功能
2018/04/28 Javascript
node.js使用免费的阿里云ip查询获取ip所在地【推荐】
2018/09/03 Javascript
JS实现的简单tab切换功能完整示例
2019/06/20 Javascript
python线程中同步锁详解
2018/04/27 Python
python频繁写入文件时提速的方法
2019/06/26 Python
python删除文件夹下相同文件和无法打开的图片
2019/07/16 Python
python中pandas库中DataFrame对行和列的操作使用方法示例
2020/06/14 Python
时装界的“朋克之母”:Vivienne Westwood
2017/07/06 全球购物
澳大利亚宠物食品和药物在线:Jumbo Pets
2018/03/24 全球购物
亚洲最大的眼镜批发商和零售商之一:Glasseslit
2018/10/08 全球购物
ASICS印度官方网站:日本专业运动品牌
2020/06/20 全球购物
精彩的英文自荐信
2014/01/30 职场文书
python编程简单几行代码实现视频转换Gif示例
2021/10/05 Python
聊聊SpringBoot自动装配的魔力
2021/11/17 Java/Android