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解析xml文件操作实例
Oct 05 Python
Python中MYSQLdb出现乱码的解决方法
Oct 11 Python
Python操作RabbitMQ服务器实现消息队列的路由功能
Jun 29 Python
python网络编程调用recv函数完整接收数据的三种方法
Mar 31 Python
python、java等哪一门编程语言适合人工智能?
Nov 13 Python
Python实现的多项式拟合功能示例【基于matplotlib】
May 15 Python
Python3实现对列表按元组指定列进行排序的方法分析
Dec 22 Python
详解python:time模块用法
Mar 25 Python
django多个APP的urls设置方法(views重复问题解决)
Jul 19 Python
python lambda函数及三个常用的高阶函数
Feb 05 Python
python数据预处理 :数据抽样解析
Feb 24 Python
python unittest单元测试的步骤分析
Aug 02 Python
实例详解Python的进程,线程和协程
Python获取指定日期是"星期几"的6种方法
Python+tkinter实现高清图片保存
Python中的 Set 与 dict
Mar 13 #Python
Python echarts实现数据可视化实例详解
分享3个非常实用的 Python 模块
Mar 03 #Python
详解在OpenCV中如何使用图像像素
You might like
PHP备份数据库生成SQL文件并下载的函数代码
2012/02/05 PHP
探讨如何在php168_cms中提取验证码
2013/06/08 PHP
跨域表单提交状态的变相判断代码
2009/11/12 Javascript
JavaScript 学习笔记(十四) 正则表达式
2010/01/22 Javascript
javascript使用正则控制input输入框允许输入的值方法大全
2014/06/19 Javascript
Windows8下搭建Node.js开发环境教程
2014/09/03 Javascript
不使用ajax实现无刷新提交表单
2014/12/21 Javascript
jsMind通过鼠标拖拽的方式调整节点位置
2015/04/13 Javascript
JavaScript实现列表分页功能特效
2015/05/15 Javascript
jQuery.ajax实现根据不同的Content-Type做出不同的响应
2016/11/03 Javascript
JavaScript之事件委托实例(附原生js和jQuery代码)
2017/07/22 jQuery
微信小程序表单弹窗实例
2018/07/19 Javascript
nodejs使用node-xlsx生成excel的方法示例
2019/08/22 NodeJs
在JavaScript中实现链式调用的实现
2019/12/24 Javascript
Vue过渡效果之CSS过渡详解(结合transition,animation,animate.css)
2020/02/05 Javascript
javascript代码实现简易计算器
2021/01/25 Javascript
[01:57]2016完美“圣”典风云人物:国士无双专访
2016/12/04 DOTA
Python判断变量是否已经定义的方法
2014/08/18 Python
python命令行参数解析OptionParser类用法实例
2014/10/09 Python
Python实现去除代码前行号的方法
2015/03/10 Python
Python实现树的先序、中序、后序排序算法示例
2017/06/23 Python
浅谈python中的__init__、__new__和__call__方法
2017/07/18 Python
python爬虫实战之最简单的网页爬虫教程
2017/08/13 Python
numpy中实现ndarray数组返回符合特定条件的索引方法
2018/04/17 Python
Python使用paramiko操作linux的方法讲解
2019/02/25 Python
python爬虫 爬取58同城上所有城市的租房信息详解
2019/07/30 Python
Python读写操作csv和excle文件代码实例
2020/03/16 Python
美国体育用品商店:Academy Sports + Outdoors
2020/01/04 全球购物
自行车租赁公司创业计划书
2014/01/28 职场文书
2014年两会学习心得体会
2014/03/10 职场文书
意向协议书范本
2014/04/23 职场文书
房地产资料员岗位职责
2014/07/02 职场文书
公务员廉洁从政心得体会
2016/01/19 职场文书
python四种出行路线规划的实现
2021/06/23 Python
Django框架中模型的用法
2022/06/10 Python
Linux中各个目录的作用与内容
2022/06/28 Servers