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 相关文章推荐
DJANGO-ALLAUTH社交用户系统的安装配置
Nov 18 Python
Python里disconnect UDP套接字的方法
Apr 23 Python
Python基于matplotlib绘制栈式直方图的方法示例
Aug 09 Python
python实现的MySQL增删改查操作实例小结
Dec 19 Python
PyQt5根据控件Id获取控件对象的方法
Jun 25 Python
使用django实现一个代码发布系统
Jul 18 Python
python取均匀不重复的随机数方式
Nov 27 Python
Django 自定义权限管理系统详解(通过中间件认证)
Mar 11 Python
Python实现文件压缩和解压的示例代码
Aug 12 Python
python 监控logcat关键字功能
Sep 04 Python
Windows环境下Python3.6.8 importError: DLLload failed:找不到指定的模块
Nov 01 Python
python 利用matplotlib在3D空间绘制二次抛物面的案例
Feb 06 Python
实例详解Python的进程,线程和协程
Python获取指定日期是"星期几"的6种方法
Python+tkinter实现高清图片保存
Python中的 Set 与 dict
Mar 13 #Python
Python echarts实现数据可视化实例详解
分享3个非常实用的 Python 模块
Mar 03 #Python
详解在OpenCV中如何使用图像像素
You might like
BBS(php & mysql)完整版(七)
2006/10/09 PHP
用php和MySql来与ODBC数据连接
2006/10/09 PHP
PHP中unset,array_splice删除数组中元素的区别
2014/07/28 PHP
php图片添加水印例子
2016/07/20 PHP
PHP加密解密类实例代码
2016/07/20 PHP
php7性能提升的原因详解
2019/10/13 PHP
jQuery封装的获取Url中的Get参数示例
2013/11/26 Javascript
js实现模拟银行卡账号输入显示效果
2015/11/18 Javascript
js实现的简单图片浮动效果完整实例
2016/05/10 Javascript
js实现短信发送倒计时功能(正则验证)
2017/02/10 Javascript
Node.js对MongoDB数据库实现模糊查询的方法
2017/05/03 Javascript
Vue.js 通过jQuery ajax获取数据实现更新后重新渲染页面的方法
2018/08/09 jQuery
javascript设计模式之迭代器模式
2020/01/30 Javascript
[00:43]DOTA2小紫本全民票选福利PA至宝全方位展示
2014/11/25 DOTA
[02:00]最后,我终于出了辉耀
2018/03/27 DOTA
[45:17]DOTA2-DPC中国联赛定级赛 Phoenix vs DLG BO3第三场 1月9日
2021/03/11 DOTA
[01:09:16]DOTA2-DPC中国联赛 正赛 SAG vs Dynasty BO3 第一场 1月25日
2021/03/11 DOTA
Python创建模块及模块导入的方法
2015/05/27 Python
python修改字典内key对应值的方法
2015/07/11 Python
python基于phantomjs实现导入图片
2016/05/13 Python
Python 字典与字符串的互转实例
2017/01/13 Python
解决uWSGI的编码问题详解
2017/03/24 Python
dataframe设置两个条件取值的实例
2018/04/12 Python
解决Tensorflow安装成功,但在导入时报错的问题
2018/06/13 Python
python 使用sys.stdin和fileinput读入标准输入的方法
2018/10/17 Python
Python之两种模式的生产者消费者模型详解
2018/10/26 Python
pandas 使用均值填充缺失值列的小技巧分享
2019/07/04 Python
css3实现波纹特效、H5实现动态波浪效果
2018/01/31 HTML / CSS
SHEIN台湾:购买最新流行女装服饰
2019/05/18 全球购物
师范生自荐信范文
2013/10/06 职场文书
计算机专业毕业生推荐信
2013/11/25 职场文书
房地产出纳岗位职责
2013/12/01 职场文书
学校门卫岗位职责
2014/03/16 职场文书
群众路线剖析材料范文
2014/10/09 职场文书
财务统计员岗位职责
2015/04/14 职场文书
辅导员学期工作总结
2015/08/14 职场文书