协程
asyncio
asyncio 是用来编写 并发 代码的库,使用 async/await 语法。asyncio 往往是构建 IO 密集型和高层级 结构化 网络代码的最佳选择。
协程函数和协程对象
协程函数: 定义形式为 async def 的函数 协程对象: 调用 协程函数 所返回的对象
import asyncio
async def add(x, y):
await asyncio.sleep(2)
return x + y
async def mult(x, y):
await asyncio.sleep(1)
return x * y
await语句
await只能在协程函数中使用,后面跟可等待对象;可等待对象有三种主要类型: 协程, 任务 和 Future
async def run_main():
await add(5, 6)
task = asyncio.create_task(mult(5, 6))
await task
print(task)
任务
asyncio.create_task() 函数用来创建任务; asyncio.create_task(coro, *, name=None)
async def task_function():
task1 = asyncio.create_task(add(5, 6))
task2 = asyncio.create_task(mult(5, 6))
await task1
await task2
print(task1.result(), task2.result())
运行 asyncio 程序
asyncio.run(coro, *, debug=False)函数用来运行最高层级的入口点
async def run_main():
res1 = await add(5, 6)
res2 = await mult(5, 6)
return res1, res2
def run_main1():
res1, res2 = asyncio.run(run_main())
print(res1, res2)
if __name__ == '__main__':
run_main1()
并发运行任务
awaitable asyncio.gather(*aws, loop=None, return_exceptions=False) 并发 运行 aws 序列中的 可等待对象
async def run_gether(x, y):
fun_list = [add(x, y), mult(x, y)]
return await asyncio.gather(*fun_list)
def run_main2():
res = asyncio.run(run_gether(5, 6))
print(res)
add函数和mult函数时并发运行的,总耗时接近耗时多的任务函数
|