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 相关文章推荐
更改Ubuntu默认python版本的两种方法python-> Anaconda
Dec 18 Python
Python实现在线暴力破解邮箱账号密码功能示例【测试可用】
Sep 06 Python
python中的不可变数据类型与可变数据类型详解
Sep 16 Python
python将list转为matrix的方法
Dec 12 Python
Python变量类型知识点总结
Feb 18 Python
python3利用Socket实现通信的方法示例
May 06 Python
解决python文件双击运行秒退的问题
Jun 24 Python
关于Python内存分配时的小秘密分享
Sep 05 Python
Python整数与Numpy数据溢出问题解决
Sep 11 Python
如何在python中写hive脚本
Nov 08 Python
python GUI库图形界面开发之PyQt5窗口类QMainWindow详细使用方法
Feb 26 Python
python tkinter模块的简单使用
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
PHP __autoload函数(自动载入类文件)的使用方法
2012/02/04 PHP
跟我学Laravel之配置Laravel
2014/10/15 PHP
php+ajax实现无刷新动态加载数据技术
2015/04/28 PHP
PHP中PDO的事务处理分析
2016/04/07 PHP
thinkPHP+ajax实现统计页面pv浏览量的方法
2017/03/15 PHP
PHP的cookie与session原理及用法详解
2019/09/27 PHP
laravel csrf排除路由,禁止,关闭指定路由的例子
2019/10/21 PHP
laravel框架中视图的基本使用方法分析
2019/11/23 PHP
PHP 扩展Memcached命令用法实例总结
2020/06/04 PHP
jquery 简短几句代码实现给元素动态添加及获取提示信息
2011/09/01 Javascript
JavaScript使用二分查找算法在数组中查找数据的方法
2015/04/07 Javascript
javascript模拟C#格式化字符串
2015/08/26 Javascript
js过滤HTML标签完整实例
2015/11/26 Javascript
javascript和jquery实现用户登录验证
2016/05/04 Javascript
vue从使用到源码实现教程详解
2016/09/19 Javascript
String字符串截取的四种方式总结
2016/11/28 Javascript
浅析Angular2子模块以及异步加载
2017/04/24 Javascript
Bootstrap table学习笔记(2) 前后端分页模糊查询
2017/05/18 Javascript
React简单介绍
2017/05/24 Javascript
JS/jQuery实现DIV延时几秒后消失或显示的方法
2018/02/12 jQuery
Vue常见面试题整理【值得收藏】
2018/09/20 Javascript
vue多层嵌套路由实例分析
2019/03/19 Javascript
在GitHub Pages上使用Pelican搭建博客的教程
2015/04/25 Python
Python使用dis模块把Python反编译为字节码的用法详解
2016/06/14 Python
pandas的排序和排名的具体使用
2019/07/31 Python
Django 解决model 反向引用中的related_name问题
2020/05/19 Python
PHP基于phpqrcode类库生成二维码过程解析
2020/05/28 Python
python制作微博图片爬取工具
2021/01/16 Python
HTML5 placeholder(空白提示)属性介绍
2013/08/07 HTML / CSS
一套C#面试题
2013/10/09 面试题
幼儿师范毕业生自荐信
2013/11/09 职场文书
《伯牙绝弦》教学反思
2014/03/02 职场文书
领导干部民主生活会自我剖析材料范文
2014/09/20 职场文书
简历自荐信范文
2015/03/09 职场文书
出纳试用期自我评价
2015/03/10 职场文书
北京青年观后感
2015/06/15 职场文书