python由于GIL(全局锁)的存在,不能发挥多核的优势,在IO密集型的网络编程里,异步处理比同步处理能提升成百上千倍的效率,弥补了python性能方面的短板。
python3.4版本引入asyncio到标准库,python2x没有加这个库,python3.5又加入了async/await特性。
同步/异步的概念
同步是指完成事务的逻辑,先执行第一个事务,如果阻塞了,会一直等待,直到这个事务完成,再执行第二个事务,顺序执行。
异步是和同步相对的,异步是指在处理调用这个事务的之后,不会等待这个事务的处理结果,直接处理第二个事务去了,通过状态、通知、回调来通知调用者处理结果。
asyncio
对比同步代码和异步代码编写方面的差异,其次看下两者性能上的差距,使用sleep(1)模拟耗时1秒的io操作。
同步代码
import time
def hello():
time.sleep(1)
def run():
for i in range(5):
hello()
print(time.time())
if __name__ == '__main__':
run()
# 结果
# 间隔约是1s
# 1549956123.908849
# 1549956124.9128718
# 1549956125.9164648
# 1549956126.91946
# 1549956127.922292
异步代码
import asyncio
import time
# 定义异步函数
async def hello():