第98p,Python中实现协程的4种方式(下)

领取福利
大家好 , 我是杨数Tos , 这是《从零基础到大神》系列课程的第98篇文章 , 第三阶段的课程:Python进阶知识:简单讲讲在PYthon中实现协程异步的4种方式(下篇) 。
第98p,Python中实现协程的4种方式(下)
文章图片
1、通过asyncio装饰器实现协程
首先 , 通过asyncio装饰器的方式实现协程是在Python3.4版本以后才有的方法;
第98p,Python中实现协程的4种方式(下)】在Python3.8版本以后又不建议通过asyncio装饰器实现协程 , 现在常用的是async+await的方式实现协程异步 。
第98p,Python中实现协程的4种方式(下)
文章图片
请看上图 , 在本案例的代码中:
A、使用asyncio.sleep()模拟遇到IO阻塞的情况 , 与greenlet及单纯的yield关键字不同的时 , 程序在遇到asyncio.sleep时 , 不需要手动添加代码 , 程序会自动跳转到新任务上执行 , 等到当前io不再阻塞 , 再继续跳回之前的任务去自动执行;
第98p,Python中实现协程的4种方式(下)
文章图片
B、使用“@asyncio.coroutine”装饰器装饰了函数 , 这个函数就是一个协程函数了;调用协程函数执行函数体代码使用函数名+括号的方式是无效的 , 需要通过生成事件循环器 , 让事件循环器自动执行 。
第98p,Python中实现协程的4种方式(下)
文章图片
2、通过async+await关键字实现协程
首先 , async+await关键字实现异步协程的方式是在Python3.7版本以后才有的 , 使用时需要注意Python的版本 。
asait关键字后面可以加协程对象、Future对象、Task对象 , 只要是如IO阻塞之类的可等待对象都可以 。
第98p,Python中实现协程的4种方式(下)
文章图片
使用asyncio装饰器实现协程要生成事件循环器 , 把任务放到事件循环中调用;我们可以直接使用asyncio.run(协程对象)也可以达到同样的效果 。
第98p,Python中实现协程的4种方式(下)
文章图片
如果想提高协程的效率 , 可以使用uvloop模块提供的事件循环替代asyncio模块中的循环器 , 也可以提高协程的运行效率;
只需要在代码中添加一句“asyncio.set_event_loop(uvloop.EventloopPoli())”即可 。
第98p,Python中实现协程的4种方式(下)
文章图片
以上是本期内容 , 如果有表达不对的内容 , 欢迎您的留言、斧正 , 我们一起天天向上 。
感谢您的阅读 , 您的三连【关注、点赞、收藏】就是对我最大的支持 , 谢谢!
本文由杨数Tos原创 , 欢迎关注 , 带你一起长知识 。
推荐内容
量化交易公开课