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