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使用装饰器和线程限制函数执行时间的方法
Apr 18 Python
Python类属性与实例属性用法分析
May 09 Python
tensorflow实现简单的卷积神经网络
May 24 Python
Python 比较文本相似性的方法(difflib,Levenshtein)
Oct 15 Python
通过PHP与Python代码对比的语法差异详解
Jul 10 Python
Python使用import导入本地脚本及导入模块的技巧总结
Aug 07 Python
Python 列表的清空方式
Jan 13 Python
详解有关PyCharm安装库失败的问题的解决方法
Feb 02 Python
Python集成开发工具Pycharm的安装和使用详解
Mar 18 Python
Django静态文件加载失败解决方案
Aug 26 Python
使用豆瓣源来安装python中的第三方库方法
Jan 26 Python
python实现会员管理系统
Mar 18 Python
实例详解Python的进程,线程和协程
Python获取指定日期是"星期几"的6种方法
Python+tkinter实现高清图片保存
Python中的 Set 与 dict
Mar 13 #Python
Python echarts实现数据可视化实例详解
分享3个非常实用的 Python 模块
Mar 03 #Python
详解在OpenCV中如何使用图像像素
You might like
用PHP动态创建Flash动画
2006/10/09 PHP
对Session和Cookie的区分与解释
2007/03/16 PHP
PHP提取中文首字母
2008/04/09 PHP
如何让您的中波更粗更长 - 中波框形天线制作
2021/03/10 无线电
JavaScript入门教程(12) js对象化编程
2009/01/31 Javascript
js之ActiveX控件使用说明 new ActiveXObject()
2014/03/03 Javascript
node.js中使用node-schedule实现定时任务实例
2014/06/03 Javascript
JS 新增Cookie 取cookie值 删除cookie 举例详解
2014/10/10 Javascript
jQuery中outerHeight()方法用法实例
2015/01/19 Javascript
JavaScript控制网页层收起和展开效果的方法
2015/04/15 Javascript
理解javascript模块化
2016/03/28 Javascript
javascript实现Java中的Map对象功能的实例详解
2017/08/21 Javascript
vue引用js文件的多种方式(推荐)
2018/05/17 Javascript
vue使用el-upload上传文件及Feign服务间传递文件的方法
2019/03/15 Javascript
使用JS判断页面是首次被加载还是刷新
2019/05/26 Javascript
独立部署小程序基于nodejs的服务器过程详解
2019/06/24 NodeJs
详解JWT token心得与使用实例
2019/08/02 Javascript
使用vue重构资讯页面的实例代码解析
2019/11/26 Javascript
vue中watch和computed为什么能监听到数据的改变以及不同之处
2019/12/27 Javascript
python3使用tkinter实现ui界面简单实例
2014/01/10 Python
Python实现给qq邮箱发送邮件的方法
2015/05/28 Python
Python控制多进程与多线程并发数总结
2016/10/26 Python
matplotlib给子图添加图例的方法
2018/08/03 Python
详解Python self 参数
2019/08/30 Python
Python3 A*寻路算法实现方式
2019/12/24 Python
Python 自由定制表格的实现示例
2020/03/20 Python
call在Python中改进数列的实例讲解
2020/12/09 Python
html5 web本地存储将取代我们的cookie
2012/12/26 HTML / CSS
Html5调用手机摄像头并实现人脸识别的实现
2018/12/21 HTML / CSS
马来西亚最热门的在线时尚商店:FashionValet
2018/11/11 全球购物
文明家庭先进事迹材料
2014/05/14 职场文书
工程材料采购方案
2014/05/18 职场文书
个人学习群众路线心得体会
2014/11/05 职场文书
MySQL query_cache_type 参数与使用详解
2021/07/01 MySQL
Django模型层实现多表关系创建和多表操作
2021/07/21 Python
详解gantt甘特图可拖拽、编辑(vue、react都可用 highcharts)
2021/11/27 Vue.js