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 datetime时间格式化去掉前导0
Jul 31 Python
django实现分页的方法
May 26 Python
使用Python导出Excel图表以及导出为图片的方法
Nov 07 Python
python开发中range()函数用法实例分析
Nov 12 Python
Django中间件工作流程及写法实例代码
Feb 06 Python
python通过配置文件共享全局变量的实例
Jan 11 Python
对Python Pexpect 模块的使用说明详解
Feb 14 Python
简单了解python gevent 协程使用及作用
Jul 22 Python
手把手教你pycharm专业版安装破解教程(linux版)
Sep 26 Python
selenium+Chrome滑动验证码破解二(某某网站)
Dec 17 Python
关于Django Models CharField 参数说明
Mar 31 Python
python第三方网页解析器 lxml 扩展库与 xpath 的使用方法
Apr 06 Python
实例详解Python的进程,线程和协程
Python获取指定日期是"星期几"的6种方法
Python+tkinter实现高清图片保存
Python中的 Set 与 dict
Mar 13 #Python
Python echarts实现数据可视化实例详解
分享3个非常实用的 Python 模块
Mar 03 #Python
详解在OpenCV中如何使用图像像素
You might like
通过php删除xml文档内容的方法
2015/01/23 PHP
在Javascript中为String对象添加trim,ltrim,rtrim方法
2006/09/22 Javascript
JQuery AJAX实现目录浏览与编辑的代码
2008/10/21 Javascript
基于jQuery的弹出警告对话框美化插件(警告,确认和提示)
2010/06/10 Javascript
模拟select的代码
2011/10/19 Javascript
JavaScript高级程序设计(第3版)学习笔记8 js函数(中)
2012/10/11 Javascript
js修改地址栏URL参数解决url参数问题
2012/12/15 Javascript
js实现俄罗斯方块小游戏分享
2014/01/31 Javascript
javascript结合fileReader 实现上传图片
2015/01/30 Javascript
js正则表达式匹配数字字母下划线等
2015/04/14 Javascript
AngularJS基础学习笔记之简单介绍
2015/05/10 Javascript
jQuery实现带有上下控制按钮的简单多行滚屏效果代码
2015/09/04 Javascript
JavaScript代码实现图片循环滚动效果
2020/03/19 Javascript
vue组件表单数据回显验证及提交的实例代码
2018/08/30 Javascript
vue项目动态设置页面title及是否缓存页面的问题
2018/11/08 Javascript
使用jQuery动态设置单选框的选中效果
2018/12/06 jQuery
小程序实现搜索界面 小程序实现推荐搜索列表效果
2019/05/18 Javascript
vue-cli创建的项目中的gitHooks原理解析
2020/02/14 Javascript
Python中使用copy模块实现列表(list)拷贝
2015/04/14 Python
Python在线运行代码助手
2016/07/15 Python
Python实现模拟浏览器请求及会话保持操作示例
2018/07/30 Python
python 用下标截取字符串的实例
2018/12/25 Python
Python3变量与基本数据类型用法实例分析
2020/02/14 Python
4行Python代码生成图像验证码(2种)
2020/04/07 Python
基于python实现ROC曲线绘制广场解析
2020/06/28 Python
利用python进行文件操作
2020/12/04 Python
一款CSS3实现多功能下拉菜单(带分享按)的教程
2014/11/05 HTML / CSS
css3的focus-within选择器的使用
2020/05/11 HTML / CSS
html5 canvas简单封装一个echarts实现不了的饼图
2018/06/12 HTML / CSS
广告学毕业生求职信
2014/01/30 职场文书
数控专业个人求职信范文
2014/02/05 职场文书
初三开学计划书
2014/04/27 职场文书
幼儿园教研活动总结
2014/04/30 职场文书
岗位职责说明书
2014/05/07 职场文书
失职检讨书大全
2015/01/26 职场文书
MySQL 条件查询的常用操作
2022/04/28 MySQL