当前位置: 首页>>代码示例 >>用法及示例精选 >>正文


Python asyncio.gather用法及代码示例


用法:

awaitable asyncio.gather(*aws, return_exceptions=False)

aws 序列 concurrently 中运行等待对象。

如果 aws 中的任何等待是协程,它会自动安排为任务。

如果所有可等待对象都成功完成,则结果是返回值的聚合列表。结果值的顺序对应于 aws 中等待的顺序。

如果return_exceptionsFalse(默认),第一个引发的异常会立即传播到等待的任务gather().其他待办事项aws序列不会被取消并将继续运行。

如果 return_exceptionsTrue ,则将异常视为成功结果,并在结果列表中聚合。

如果 gather()cancelled ,则所有提交的等待项(尚未完成)也是 cancelled

如果有任何任务或未来来自aws序列是cancelled, 它被视为提升CancelledError- 这gather()电话是不是在这种情况下取消。这是为了防止取消一个已提交的 Task/Future 导致其他 Tasks/Future 被取消。

在 3.10 版中更改:删除了loop范围。

例子:

import asyncio

async def factorial(name, number):
    f = 1
    for i in range(2, number + 1):
        print(f"Task {name}: Compute factorial({number}), currently i={i}...")
        await asyncio.sleep(1)
        f *= i
    print(f"Task {name}: factorial({number}) = {f}")
    return f

async def main():
    # Schedule three calls *concurrently*:
    L = await asyncio.gather(
        factorial("A", 2),
        factorial("B", 3),
        factorial("C", 4),
    )
    print(L)

asyncio.run(main())

# Expected output:
#
#     Task A: Compute factorial(2), currently i=2...
#     Task B: Compute factorial(3), currently i=2...
#     Task C: Compute factorial(4), currently i=2...
#     Task A: factorial(2) = 2
#     Task B: Compute factorial(3), currently i=3...
#     Task C: Compute factorial(4), currently i=3...
#     Task B: factorial(3) = 6
#     Task C: Compute factorial(4), currently i=4...
#     Task C: factorial(4) = 24
#     [2, 6, 24]

注意

如果 return_exceptions 为 False,则在标记为完成后取消 gather() 不会取消任何已提交的等待项。例如,gather 可以在将异常传播给调用者后标记为已完成,因此,在从 collect 捕获异常(由 awaitables 之一引发)后调用 gather.cancel() 不会取消任何其他 awaitables。

在 3.7 版中更改:如果gather本身被取消,取消被传播而不管return_exceptions.

在 3.10 版中更改:删除了loop范围。

自 3.10 版起已弃用:如果没有提供位置参数或者不是所有位置参数都是Future-like 对象并且没有正在运行的事件循环,则会发出弃用警告。

相关用法


注:本文由纯净天空筛选整理自python.org大神的英文原创作品 asyncio.gather。非经特殊声明,原始代码版权归原作者所有,本译文未经允许或授权,请勿转载或复制。