欢迎访问宙启技术站
智能推送

使用gather()函数实现多协程的顺序执行

发布时间:2023-12-25 23:01:23

在Python中,协程是一种轻量级的并发编程模型,可以通过隐式的上下文切换实现多个任务的顺序执行。协程可以通过asyncio库来实现,其中gather()函数用于并发执行多个协程,并返回一个包含所有协程结果的列表。

下面是使用gather()函数实现多协程顺序执行的示例代码:

import asyncio

async def task1():
    print("Task 1 started")
    await asyncio.sleep(1)
    print("Task 1 completed")
    return 1

async def task2():
    print("Task 2 started")
    await asyncio.sleep(2)
    print("Task 2 completed")
    return 2

async def task3():
    print("Task 3 started")
    await asyncio.sleep(3)
    print("Task 3 completed")
    return 3

async def main():
    # 并发执行多个协程
    results = await asyncio.gather(task1(), task2(), task3())
    print("All tasks completed")
    print("Results:", results)

# 创建事件循环并运行主协程
loop = asyncio.get_event_loop()
loop.run_until_complete(main())
loop.close()

在上述代码中,我们定义了三个异步任务task1()task2()task3(),分别模拟耗时的操作。这些任务会被gather()函数并发执行,并在全部协程执行完毕后返回结果。

main()协程中,我们通过await asyncio.gather(task1(), task2(), task3())来并发执行多个任务。gather()函数会等待所有协程完成,并返回一个包含所有协程结果的列表。

最后,我们打印所有任务完成的提示,并输出结果。运行上述代码,可以看到三个任务按照顺序执行,输出结果如下:

Task 1 started
Task 2 started
Task 3 started
Task 1 completed
Task 2 completed
Task 3 completed
All tasks completed
Results: [1, 2, 3]

从输出结果可以看出,三个任务按照顺序执行,并且各自完成后才会执行下一个任务。最终,我们得到一个包含所有任务结果的列表[1, 2, 3]。

使用gather()函数可以方便地实现多个协程的顺序执行,并且能够获取到所有协程的结果。这对于某些需要多个协程协同完成的任务非常有用,例如爬虫程序中的数据采集和处理等操作。