1. 协程的概念
协程可以理解为线程的微线程,每个协程对应一个可执行函数。
具体解释可见(14条消息) Python 异步 async/await(进阶)_零否的博客-CSDN博客_async await python
2. 协程在python中的实现
协程的实现在python3中可以利用async模块。
具体代码如下:
import asyncio # 导入 asyncio库
def xiechengTest():
# 第一步,创建协程(异步函数)
async def fun1(): # 异步函数相较普通函数定义前面多了async
await asyncio.sleep(3) # 通过await声明一个可等待对象,比如异步函数或awaitable类的实例
print("fun1执行完毕")
async def fun2():
await asyncio.sleep(1)
print("fun2执行完毕")
# 第二步,建立事件循环,建立事件循环包含以下几步
# 1. 创建一个事件循环
loop = asyncio.get_event_loop()
# 2. 将异步函数加入事件队列
tasks = [
fun1(),
fun2(),
]
# 3. 执行事件队列, 直到最晚的一个事件被处理完毕后结束
loop.run_until_complete(asyncio.wait(tasks))
# 4. 用 close() 方法关闭事件循环, 以彻底清理 loop 对象防止误用
loop.close()
if __name__ == "__main__":
xiechengTest()
3. 创建协程的好处
最直观的优点就是充分利用CPU,节省程序运行时间。在上面主程序中稍作修改,可以计算出该程序的运行时间:
if __name__ == "__main__":
import time
start = time.time()
xiechengTest()
end = time.time()
print(f"程序运行时间为{end - start}")
运行结果如下:
>>> fun2执行完毕
>>> fun1执行完毕
>>> 程序运行时间为3.0134615898132324
可以看到整个程序运行时间仅比单独执行fun1()函数的时间多了一点点,这说明fun2()执行时fun()1也在同步执行,多出来的那点时间是线程切换导致的。