asyncio 在同一个一步函数内部并发执行多个异步操作
asyncio 在同一个一步函数内部并发执行多个异步操作
你可以使用 asyncio.create_task 在同一个异步函数内部并发执行多个异步操作,即使它们之间没有关联。以下是一个示例,展示如何在一个异步函数中并发执行两个不相关的数据库读取操作:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
import asyncio
async def read_from_database_1():
await asyncio.sleep(2) # 模拟读取数据库的操作
print("Read from database 1")
return "Result 1"
async def read_from_database_2():
await asyncio.sleep(3) # 模拟读取数据库的操作
print("Read from database 2")
return "Result 2"
async def main():
# 创建两个并发任务
task1 = asyncio.create_task(read_from_database_1())
task2 = asyncio.create_task(read_from_database_2())
# 等待两个任务完成并获取结果
result1, result2 = await asyncio.gather(task1, task2)
print("Results:", result1, result2)
# 运行 main 函数
asyncio.run(main())
在这个例子中:
read_from_database_1和read_from_database_2是两个模拟的异步数据库读取操作。- 在
main函数中,使用asyncio.create_task创建了两个任务来并发执行这两个数据库读取操作。 - 使用
await asyncio.gather(task1, task2)并发等待这两个任务完成,并获取它们的结果。
这样做可以使两个数据库读取操作并发执行,而不是顺序执行,从而提高效率。
这个方法的关键点是:
- 使用
asyncio.create_task创建任务。 - 使用
asyncio.gather并发等待多个任务完成。
本文由作者按照 CC BY 4.0 进行授权