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脚本简单实现打开默认浏览器登录人人和打开QQ的方法
Apr 12 Python
python下载图片实现方法(超简单)
Jul 21 Python
python实现简单中文词频统计示例
Nov 08 Python
python使用锁访问共享变量实例解析
Feb 08 Python
对numpy中数组元素的统一赋值实例
Apr 04 Python
Python中函数的基本定义与调用及内置函数详解
May 13 Python
python3.7 openpyxl 删除指定一列或者一行的代码
Oct 08 Python
Pytorch对Himmelblau函数的优化详解
Feb 29 Python
python实现贪吃蛇游戏源码
Mar 21 Python
Python爬虫如何应对Cloudflare邮箱加密
Jun 24 Python
python 实现socket服务端并发的四种方式
Dec 14 Python
使用Djongo模块在Django中使用MongoDB数据库
Jun 20 Python
实例详解Python的进程,线程和协程
Python获取指定日期是"星期几"的6种方法
Python+tkinter实现高清图片保存
Python中的 Set 与 dict
Mar 13 #Python
Python echarts实现数据可视化实例详解
分享3个非常实用的 Python 模块
Mar 03 #Python
详解在OpenCV中如何使用图像像素
You might like
PHP二维数组排序简单实现方法
2016/02/14 PHP
laravel 获取某个查询的查询SQL语句方法
2019/10/12 PHP
prototype 源码中文说明之 prototype.js
2006/09/22 Javascript
不用AJAX和IFRAME,说说真正意义上的ASP+JS无刷新技术
2008/09/25 Javascript
Knockoutjs的环境搭建教程
2012/11/26 Javascript
js实现按钮加背景图片常用方法
2014/11/01 Javascript
js实现获取当前时间是本月第几周的方法
2015/08/11 Javascript
jquery.cookie实现的客户端购物车操作实例
2015/12/24 Javascript
浅析JS操作DOM的一些常用方法
2016/05/13 Javascript
浅析angularJS中的ui-router和ng-grid模块
2016/05/20 Javascript
你知道setTimeout是如何运行的吗?
2016/08/16 Javascript
ReactNative-JS 调用原生方法实例代码
2016/10/08 Javascript
javascript 中的继承实例详解
2017/05/05 Javascript
JavaScript框架Angular和React深度对比
2017/11/20 Javascript
Angular 数据请求的实现方法
2018/05/07 Javascript
vue3 源码解读之 time slicing的使用方法
2019/10/31 Javascript
Vue事件处理原理及过程详解
2020/03/11 Javascript
python创建列表和向列表添加元素的实现方法
2017/12/25 Python
python如何生成各种随机分布图
2018/08/27 Python
对pycharm 修改程序运行所需内存详解
2018/12/03 Python
python读取txt文件并取其某一列数据的示例
2019/02/19 Python
详解python列表(list)的使用技巧及高级操作
2019/08/15 Python
python函数声明和调用定义及原理详解
2019/12/02 Python
django数据模型(Model)的字段类型解析
2019/12/25 Python
python shell命令行中import多层目录下的模块操作
2020/03/09 Python
Python如何输出警告信息
2020/07/30 Python
HTML5+CSS3绘制锯齿状的矩形
2016/03/01 HTML / CSS
Python的两道面试题
2013/06/29 面试题
个人生活学习自我评价范文
2013/11/26 职场文书
《陋室铭》教学反思
2014/02/26 职场文书
我的画教学反思
2014/04/28 职场文书
公务员试用期满考核材料
2014/05/22 职场文书
省级优秀班集体申报材料
2014/05/25 职场文书
2014年企业员工工作总结
2014/12/09 职场文书
nginx限制并发连接请求数的方法
2021/04/01 Servers
JAVA SpringMVC实现自定义拦截器
2022/03/16 Python