协程,asyncio和异步编程
【【2022 Python异步编程】协程 & asycio & 异步】https://www.bilibili.com/video/BV1rY411f7GG?p=2&vd_source=02b9c3bad55a6d6dfebfa953558df337
第一部分:协程 第二部分:asyncio模块进行异步编程 第三部分:实战案例
2. 携程意义
在一个线程中如果遇到IO等待时间,线程不会傻傻等待,利用空闲时间的时候再去干其他的事
3. 异步编程
3.1 事件循环
理解成一个死循环,去检测并执行某些代码
# 去生成或获取一个事件循环
loop = asyncio.get_event_loop()
# 将任务放到任务列表
loop.run_until_complete(asyncio.wait(tasks))
3.2 快速上手
携程函数,定义函数时 async def 函数名
携程对象,执行 携程函数() 得到的对象
注意:执行携程函数创办携程对象,函数内部代码不会执行如果要运行携程函数内部代码,必须要将携程对象交给事件循环来处理。
import asyncio
async def func()
pass
result = func()
#loop = asyncio.get_event_loop()
#loop.run_until_complete(result)
asyncio.run(result)
3.3 await
await+ 可等待的对象(协程对象,Future、Task对象--> IO等待)
await 就是等待对象的值得到结果之后再往下走
示例1 :
import asyncio
async def fuc():
print("来玩呀")
response= await asyncio.sleep(2)
print("结束",response)
asyncio.run(func())
示例2:
import asyncio
async def others():
print("start")
await asyncio.sleep(2)
print("end")
return "返回值"
async def func():
print("执行协程函数内部代码")
# 遇到IO操作挂起当前协程(任务),等待IO操作完成之后再继续往下执行。当前协程挂起时,事件循环可以去执行其他协程(任务)。
response =await others()
print("IO 请求结束,结果为:",response)
asyncio.run(func())
示例3
import asyncio
async def others():
print("start")
await asyncio.sleep(2)
print("end")
return "返回值"
async def func():
print("执行协程函数内部代码")
response =await others()
print("IO 请求结束,结果为:",response)
response2 =await others()
print("IO请求结束,结果为:",response2)
asyncio.run(func())
3.4 Task 对象
白话:在事件循环中添加多个任务