使用gather()函数实现多协程任务的并行执行
发布时间:2023-12-25 23:03:16
gather()函数是asyncio模块中的一个辅助函数,它可以用于并行执行多个协程任务,并且在所有任务完成后返回一个结果列表。
下面是一个使用gather()函数实现多协程任务的示例代码:
import asyncio
async def task1():
for i in range(5):
print(f'Task 1: {i}')
await asyncio.sleep(1)
async def task2():
for i in range(5):
print(f'Task 2: {i}')
await asyncio.sleep(1)
async def main():
# 创建事件循环
loop = asyncio.get_event_loop()
# 并发执行两个任务
await asyncio.gather(task1(), task2())
# 关闭事件循环
loop.close()
asyncio.run(main())
在上面的代码中,我们定义了两个协程任务task1和task2,它们分别会打印出一些信息并暂停一秒钟。然后,在main协程函数中,我们使用gather()函数来并行执行这两个任务,并等待它们都完成。最后,我们使用run()函数来运行main协程。
执行上述代码,会看到两个任务的输出交替出现,每个任务会打印5次。这表明这两个任务是并行执行的。
gather()函数的返回值是一个awaitable对象,其中包含了所有任务的结果。如果不关心任务的结果,可以直接通过await asyncio.gather(...)来等待所有任务执行完成。
值得注意的是,在上面的示例代码中,我们使用了asyncio.run()函数来运行main协程。这是Python 3.7及以上版本提供的一个快捷函数,用于创建一个事件循环并运行一个协程。如果你的Python版本较低,可以手动创建一个事件循环并运行协程。
在实际应用中,可以利用gather()函数来并行执行多个耗时的协程任务,以提高程序的并发性和性能。例如,可以使用gather()函数同时请求多个网络接口,或者同时执行多个磁盘IO操作。通过并行执行这些任务,可以提高程序的响应速度和效率。
总结起来,gather()函数是asyncio模块中的一个重要函数,用于实现多个协程任务的并行执行,并在所有任务完成后返回一个结果列表。它可以帮助我们简化协程任务的并发编程,提高程序的性能和效率。
