1.概要
相信写过异步IO编程的人肯定对协程不陌生,那么在Python中有没有简单的方式实现协程呢?
从Python 3.5开始引入了新的语法async和await,可以非常简单的实现协程同时代码更简洁易读。
现在让我们来对比一下使用协程和不使用协程的区别!
1 | #coding=utf-8 |
上面是一段没有用到协程的代码,运行代码后会发现,虽然函数已经被声明为协程,但是函数内部没有await,所以不会主动切换函数,程序依然是顺序执行,第一个函数sleep了4秒,第二个函数sleep了3秒,总共7秒执行完毕。
让我们改一行代码:
1 | #time.sleep(x) |
将time.sleep换为await asyncio.sleep,这样做的区别就是,await会主动告诉系统,我现在要执行一个IO操作,可以把空闲的cpu让出来,先做后面的事情,这样一来,当执行到sleep的时候,因为是IO操作,所以会自动切到后面的函数,可以近似的理解为两个函数在并行执行,当所有程序执行完用时4秒(以那个用时最长的为准)
因为协程是在线程中运行,所以切换函数效率极高,另外需要强调一点的就是,异步IO和并发是两个概念,千万不要混淆。