第98p,Python中实现协程的4种方式(下)
领取福利
大家好 , 我是杨数Tos , 这是《从零基础到大神》系列课程的第98篇文章 , 第三阶段的课程:Python进阶知识:简单讲讲在PYthon中实现协程异步的4种方式(下篇) 。
文章图片
1、通过asyncio装饰器实现协程
首先 , 通过asyncio装饰器的方式实现协程是在Python3.4版本以后才有的方法;
【第98p,Python中实现协程的4种方式(下)】在Python3.8版本以后又不建议通过asyncio装饰器实现协程 , 现在常用的是async+await的方式实现协程异步 。
文章图片
请看上图 , 在本案例的代码中:
A、使用asyncio.sleep()模拟遇到IO阻塞的情况 , 与greenlet及单纯的yield关键字不同的时 , 程序在遇到asyncio.sleep时 , 不需要手动添加代码 , 程序会自动跳转到新任务上执行 , 等到当前io不再阻塞 , 再继续跳回之前的任务去自动执行;
文章图片
B、使用“@asyncio.coroutine”装饰器装饰了函数 , 这个函数就是一个协程函数了;调用协程函数执行函数体代码使用函数名+括号的方式是无效的 , 需要通过生成事件循环器 , 让事件循环器自动执行 。
文章图片
2、通过async+await关键字实现协程
首先 , async+await关键字实现异步协程的方式是在Python3.7版本以后才有的 , 使用时需要注意Python的版本 。
asait关键字后面可以加协程对象、Future对象、Task对象 , 只要是如IO阻塞之类的可等待对象都可以 。
文章图片
使用asyncio装饰器实现协程要生成事件循环器 , 把任务放到事件循环中调用;我们可以直接使用asyncio.run(协程对象)也可以达到同样的效果 。
文章图片
如果想提高协程的效率 , 可以使用uvloop模块提供的事件循环替代asyncio模块中的循环器 , 也可以提高协程的运行效率;
只需要在代码中添加一句“asyncio.set_event_loop(uvloop.EventloopPoli())”即可 。
文章图片
以上是本期内容 , 如果有表达不对的内容 , 欢迎您的留言、斧正 , 我们一起天天向上 。
感谢您的阅读 , 您的三连【关注、点赞、收藏】就是对我最大的支持 , 谢谢!
本文由杨数Tos原创 , 欢迎关注 , 带你一起长知识 。
推荐内容
量化交易公开课
- 关于芯片架构!美企英伟达又公开表态,中国第一个站出来反对
- 主控|年赚12亿 SSD主控芯片第1的大厂慧荣卖身美企:尚待中国监管层批准
- 一加科技|一加Ace2成酷安热门机型第一!超高性价比让友商无路可走?
- chatgpt|Python基础知识——什么是字典
- 编程|C++四十载,为何还能超越C、Python 成为年度编程语言?
- 三星|三星移动业务总裁:以印度第一为目标,要在中国市场“逆袭”!
- 亚马逊|亚马逊重夺品牌价值世界第一,两中国品牌进入前十!
- 在线教育|亚马逊重夺品牌价值世界第一,两中国品牌进入前十!
- 苹果|库克乐了,iPhone14ProMax拿下第一,是有点实力在身上
- intj|会成功吗?第一枚全3D打印火箭即将发射,或许能改写历史