大家好,我是杨数Tos,这是《从零基础到大神》系列课程的第98篇文章,第三阶段的课程:Python进阶知识:简单讲讲在PYthon中实现协程异步的4种方式(下篇)。
1、通过asyncio装饰器实现协程
首先,通过asyncio装饰器的方式实现协程是在Python3.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原创,欢迎关注,带你一起长知识。