Skip to main content

Python asyncio协程 - 简单等待(二)

Python asyncio协程 - 简单等待(二)

Python asyncio协程 - 简单等待(二)

asyncio协程 - 简单等待(二)

语法如下

asyncio.as_completed(aws, *, loop=None, timeout=None)

官方文档解释

并发地运行 aws 集合中的 可等待对象。 返回一个协程的迭代器。 所返回的每个协程可被等待以从剩余的可等待对象集合中获得最早的下一个结果。

如果在所有 Future 对象完成前发生超时则将引发 asyncio.TimeoutError

比如下面的示例

for coro in as_completed(aws):
    earliest_result = await coro
    # ...

我们看一个完整的示例

import asyncio
import time


async def delay_timer(delay):
    await asyncio.sleep(delay)
    print(f"delay for {delay} seconds")
    return delay


async def main():
    print(f"start at {time.strftime('%X')}")
    tasks = [delay_timer(i) for i in range(10)]
    for p in asyncio.as_completed(tasks):
        res = await p

    print(f"end at {time.strftime('%X')}")


asyncio.run(main())

运行结果如下

$ python main.py
start at 22:23:48
delay for 0 seconds
delay for 1 seconds
delay for 2 seconds
delay for 3 seconds
delay for 4 seconds
delay for 5 seconds
delay for 6 seconds
delay for 7 seconds
delay for 8 seconds
delay for 9 seconds
end at 22:23:57

 

版权声明

版权声明

张大鹏 创作并维护的 Walkerfree 博客采用 创作共用保留署名-非商业-禁止演绎4.0国际许可证。本文首发于 Walkerfree 博客(http://www.walkerfree.com/),版权所有,侵权必究。本文永久链接:http://www.walkerfree.com/article/238