import time def func(): print("我爱天空") time.sleep(3) # 这里线程处于堵塞状态,CPU不为我进行工作 print("我真的很爱天空") if __name__ == "__main__": func() # input ==> 用户输入时线程处于堵塞状态 # requests请求 ==> 发送网络请求时线程处于堵塞状态
上述demo中time.sleep(3) ==> 这里线程处于堵塞状态,CPU不为我进行工作
线程什么时候处于堵塞状态?
input
==> 用户输入时线程处于堵塞状态
requests请求
==> 发送网络请求时线程处于堵塞状态
协程的作用就是线程出现堵塞时可以转换到其他任务提高CPU的处理效率
image.png
对于协程的理解:
1.微观上:一个任务一个任务的切换
2.宏观上:多任务并行处理
3. 协程实现
# 导入异步处理的python库 import asyncio # 异步程序 async def func(): print("hello,xiaoshan") if __name__ == "__main__": f = func() # 执行异步程序 asyncio.run(f)
多线程执行时协程的作用——切换任务
demo如下::
# 导入异步处理的python库 import asyncio import time # 异步程序 async def func1(): print("我爱天空num1") await asyncio.sleep(3) # 这里线程处于堵塞状态,CPU不为我进行工作 print("我真的很爱天空num1") async def func2(): print("我爱天空num2") await asyncio.sleep(2) # 这里线程处于堵塞状态,CPU不为我进行工作 print("我真的很爱天空num2") async def func3(): print("我爱天空num3") await asyncio.sleep(4) # 这里线程处于堵塞状态,CPU不为我进行工作 print("我真的很爱天空num3") if __name__ == "__main__": f1 = func1() f2 = func2() f3 = func3() task = [f1, f2, f3] t1 = time.time() # 执行异步程序 asyncio.run(asyncio.wait(task)) t2 = time.time() print(t2-t1)
结果如下: