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高级应用实例对比:高效计算大文件中的最长行的长度
Jun 08 Python
Python查看多台服务器进程的脚本分享
Jun 11 Python
利用python发送和接收邮件
Sep 27 Python
Python实现的密码强度检测器示例
Aug 23 Python
Django model反向关联名称的方法
Dec 15 Python
python pcm音频添加头转成Wav格式文件的方法
Jan 09 Python
Django 重写用户模型的实现
Jul 29 Python
PyTorch 解决Dataset和Dataloader遇到的问题
Jan 08 Python
Python urllib2运行过程原理解析
Jun 04 Python
matplotlib制作雷达图报错ValueError的实现
Jan 05 Python
Python GUI编程之tkinter 关于 ttkbootstrap 的使用详解
Mar 03 Python
Python OpenCV形态学运算示例详解
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
redis 队列操作的例子(php)
2012/04/12 PHP
PHP中FTP相关函数小结
2016/07/15 PHP
PHP判断文件是否被引入的方法get_included_files用法示例
2016/11/29 PHP
Laravel 实现数据软删除功能
2019/08/21 PHP
PHP7 字符串处理机制修改
2021/03/09 PHP
3款实用的在线JS代码工具(国外)
2012/03/15 Javascript
jquery删除指定的html标签并保留标签内文本内容的方法
2014/04/02 Javascript
深入探讨JavaScript、JQuery屏蔽网页鼠标右键菜单及禁止选择复制
2014/06/10 Javascript
pace.js页面加载进度条插件
2015/09/29 Javascript
浅谈angular.copy() 深拷贝
2017/09/14 Javascript
vue下history模式刷新后404错误解决方法
2018/08/18 Javascript
Layui组件Table绑定行点击事件和获取行数据的方法
2018/08/19 Javascript
Vue 监听列表item渲染事件方法
2018/09/06 Javascript
JavaScript 预解析的4种实现方法解析
2019/09/03 Javascript
python和pyqt实现360的CLable控件
2014/02/21 Python
Mac下Supervisor进程监控管理工具的安装与配置
2014/12/16 Python
Django框架中方法的访问和查找
2015/07/15 Python
详解Python pygame安装过程笔记
2017/06/05 Python
在python中计算ssim的方法(与Matlab结果一致)
2019/12/19 Python
pytorch三层全连接层实现手写字母识别方式
2020/01/14 Python
Windows 平台做 Python 开发的最佳组合(推荐)
2020/07/27 Python
Ubuntu 20.04安装Pycharm2020.2及锁定到任务栏的问题(小白级操作)
2020/10/29 Python
python 如何用urllib与服务端交互(发送和接收数据)
2021/03/04 Python
CSS3制作漂亮的照片墙的实现代码
2016/06/08 HTML / CSS
美国最大的家庭鞋类零售商之一:Shoe Carnival
2017/10/06 全球购物
美国男士西装打折店:Jos. A. Bank
2017/11/13 全球购物
名词解释WEB SERVICE,SOAP,UDDI,WSDL,JAXP,JAXM;JSWDL开发包的介绍。
2012/10/27 面试题
咖啡店的创业计划书,让你hold不住
2014/01/03 职场文书
《骑牛比赛》教后反思
2014/04/22 职场文书
银行给客户的感谢信
2015/01/23 职场文书
幼儿园国庆节活动总结
2015/03/23 职场文书
Python使用scapy模块发包收包
2021/05/07 Python
如何利用pygame实现打飞机小游戏
2021/05/30 Python
试用1103暨1103、1101同门大比武 [ DAIWEI ]
2022/04/05 无线电
vue实力踩坑之push当前页无效
2022/04/10 Vue.js
Apache Hudi 加速传统的批处理模式
2022/04/24 Servers