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

Python中gather()函数的灵活应用案例

发布时间:2023-12-25 22:58:13

gather()函数是Python中asyncio库中的一个重要函数,用于同时执行多个协程,并等待它们全部完成。它可以灵活地应用于并发编程中,提高程序的性能。

以下是gather()函数的一些灵活应用案例:

1. 实现多个协程的并发执行:

import asyncio

async def coroutine1():
    await asyncio.sleep(1)
    print("Coroutine 1")

async def coroutine2():
    await asyncio.sleep(2)
    print("Coroutine 2")

async def main():
    await asyncio.gather(coroutine1(), coroutine2())
    print("All coroutines completed")

asyncio.run(main())

在这个例子中,coroutine1()和coroutine2()是两个协程,它们分别休眠1秒和2秒后打印出一些信息。使用gather()函数,我们可以同时执行这两个协程,并等待它们全部完成。最后输出"All coroutines completed"。

2. 执行带有返回值的协程:

import asyncio

async def coroutine1():
    await asyncio.sleep(1)
    return "Coroutine 1"

async def coroutine2():
    await asyncio.sleep(2)
    return "Coroutine 2"

async def main():
    results = await asyncio.gather(coroutine1(), coroutine2())
    print(results)

asyncio.run(main())

在这个例子中,coroutine1()和coroutine2()依然是两个协程,但是它们都返回一个字符串。使用gather()函数,我们可以同时执行这两个协程,并等待它们全部完成。results变量将包含这两个协程的返回值,最后输出["Coroutine 1", "Coroutine 2"]。

3. 控制并发执行的数量:

import asyncio

async def my_coroutine(number):
    print(f"Coroutine {number} started")
    await asyncio.sleep(number)
    print(f"Coroutine {number} completed")

async def main():
    tasks = [my_coroutine(1), my_coroutine(2), my_coroutine(3)]
    await asyncio.gather(*tasks)

asyncio.run(main())

在这个例子中,我们定义了my_coroutine()函数,它接受一个参数number,并打印出一些信息。使用gather()函数,我们可以同时执行多个my_coroutine()协程。在main()函数中,我们创建了三个my_coroutine()协程,并将它们放入一个列表中。然后使用*运算符展开这个列表,传递给gather()函数。这样就可以同时执行这三个协程。由于my_coroutine()函数中使用了await asyncio.sleep(number),所以会有不同的休眠时间。最后输出结果无序,如"Coroutine 2 started", "Coroutine 1 started", "Coroutine 3 started"等。

总结起来,gather()函数可以充分发挥协程的并发执行特性,提高程序的性能。通过gather()函数,我们可以实现多个协程的并发执行、获取协程的返回值以及控制并发执行的数量。这些特性使得asyncio库成为一个强大的并发编程工具。