文章

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())

在这个例子中:

  1. read_from_database_1read_from_database_2 是两个模拟的异步数据库读取操作。
  2. main 函数中,使用 asyncio.create_task 创建了两个任务来并发执行这两个数据库读取操作。
  3. 使用 await asyncio.gather(task1, task2) 并发等待这两个任务完成,并获取它们的结果。

这样做可以使两个数据库读取操作并发执行,而不是顺序执行,从而提高效率。

这个方法的关键点是:

  • 使用 asyncio.create_task 创建任务。
  • 使用 asyncio.gather 并发等待多个任务完成。
本文由作者按照 CC BY 4.0 进行授权