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

Python中gather()函数的返回值解析与处理

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

在Python的asyncio模块中提供了一个很有用的函数gather(),它可以用来并发执行多个协程任务,并等待所有任务完成后返回结果。本文将对gather()的返回值进行解析,并提供一个使用例子。

gather()函数的定义如下:

coroutine gather(*aws, loop=None, return_exceptions=False)

参数说明:

- aws:一个可迭代对象,包含需要运行的协程任务。

- loop:一个可选参数,用于指定事件循环。

- return_exceptions:一个可选参数,用于控制是否返回异常。默认情况下,若有协程任务抛出异常,gather()会立即取消所有任务并抛出异常;若将return_exceptions设置为True,则会将异常放在结果列表中进行返回。

gather()函数返回一个Future对象,当所有协程任务完成时,可以通过await关键字来获取结果。

下面是一个使用gather()函数的例子:

import asyncio

async def request(url):
    # 模拟异步IO请求,这里使用了asyncio.sleep()
    await asyncio.sleep(5)
    return f"response from {url}"

async def main():
    # 创建一个事件循环
    loop = asyncio.get_event_loop()

    # 创建三个协程任务
    tasks = [request("http://www.google.com"), request("http://www.baidu.com"), request("http://www.bing.com")]

    # 并发执行多个协程任务,并等待所有任务完成
    results = await asyncio.gather(*tasks)

    # 打印所有结果
    for result in results:
        print(result)

# 执行主函数
asyncio.run(main())

上述代码中,request()函数模拟了一个异步IO请求,通过asyncio.sleep()进行延时来模拟请求的耗时。main()函数创建了三个协程任务,并使用gather()函数并发执行这三个任务,并等待它们全部完成。最后,通过遍历结果列表来打印每个请求的返回结果。

执行上述代码后,可以看到三个请求的结果会在大约5秒之后打印出来,实现了并发执行多个异步IO请求并等待所有请求完成的效果。

总结一下,gather()函数是Python中用于并发执行多个协程任务并等待所有任务完成的一个很有用的函数,可以使用await关键字来获取结果。返回值是一个Future对象,当所有任务完成后,可以从Future对象中获取结果。同时,通过return_exceptions参数可以控制是否返回异常。