Python的异步编程
什么是协程?
协程不是计算机系统提供,程序员人为创造。
协程也可以被称为微线程,是一种用户态内的上下文切换技术。简而言之,其实就是通过一个线程实现代码块相互切换执行。
实现协程有那么几种方法:
greenlet,早期模块
yield关键字
asyncio装饰器(python3.4之后)
async,await关键字(python3.5之后)
协程的意义
在一个线程中如果遇到IO等待时间,线程不会傻等,利用空闲的时候再去干点其他事。
下面是不包含协程的代码示例,也被称为同步,因为发送了下载请求马上返回图片(结果)。
加上协程之后的一个通信形式,是再发送一个请求的时候同步发出另一个请求。这样比较快。
而且也被称为异步,因为发送了下载请求没有马上返回图片(结果)。
异步编程
事件循环
快速上手
协程函数,定义函数的时候async def 函数
协程对象,执行协程函数()得到的协程对象
async def func():
pass
result = func()
注意:执行协程函数创建协程对象,函数内部代码不会执行
如果想要运行协程函数内部代码,必须要将协程对象交给事件循环来处理。
import asyncio
async def func():
print("叭叭叭")
result = func()
# python3.7之前的版本写法
loop = asyncio.get_event_loop()
loop.run_until_complete(result)
# python3.7之后的版本写法
asyncio.run(result)
await
await+可等待的对象(协程对象、future、task对象 -> IO等待)
import asyncio
async def func():
print("来玩呀")
response = await.asyncio.sleep(2)
print("结束",response)
asyncio.run(func())