跳转到主要内容

异步 `zip` 类似聚合器,用于 `async for`

项目描述

AsyncZip 是一个类似于 zip 的简单函数,用于异步可迭代对象。它在许多方面都类似于 asyncio.wait

用法

给定 n 个异步可迭代对象,AsyncZip(*aiterables) 会返回一个新的异步可迭代对象,遍历所有这些对象。类似于 asyncio.wait,可以使用选项 FIRST_COMPLETED 等待任何可迭代对象产生值,或者使用选项 ALL_COMPLETED 等待所有可迭代对象。

class AsyncZip

def __init__(self, *asynchronous_iterables, loop=None, yield_when=FIRST_COMPLETED):
  • asynchronous_iterables: 一组异步可迭代对象

  • loop: 可选命名参数,用于指定特定的事件循环

  • yield_when: 类似于 asyncio.wait 中的 return_when,可以是 FIRST_COMPLETEDALL_COMPLETED

FIRST_COMPLETED, ALL_COMPLETED

yield_when 可以取的两个值,FIRST_COMPLETEDALL_COMPLETED,告诉 AsyncZip 应该何时产生值。默认为 FIRST_COMPLETED

  • FIRST_COMPLETED

类似于 select,当 AsyncZip 在尽可能快的时间内产生每个可迭代对象的值时,它会产生。

  • ALL_COMPLETED

这是经典的 zip 模式,其中 AsyncZip 在产生所有值之前,会等待每个迭代器的值。

示例用法

import asyncio
from asynczip import AsyncZip

class DummyAsyncIterable:
    def __init__(self, items):
        self.items = items

    async def __aiter__(self):
        return self

    async def __anext__(self):
        try:
            return self.items.pop(0)
        except IndexError:
            raise StopAsyncIteration

async def test():
    async for items in AsyncZip(DummyAsyncIterable(list("foo")),
                                DummyAsyncIterable(list("bar"))):
        print(items)

asyncio.get_event_loop().run_until_complete(test())

给出

[<Task finished coro=<DummyAsyncIterable.__anext__() done, defined at test.py:11> result='f'>,<Task finished coro=<DummyAsyncIterable.__anext__() done, defined at test.py:11> result='b'>]
[<Task finished coro=<DummyAsyncIterable.__anext__() done, defined at test.py:11> result='o'>, <Task finished coro=<DummyAsyncIterable.__anext__() done, defined at test.py:11> result='a'>]
[<Task finished coro=<DummyAsyncIterable.__anext__() done, defined at test.py:11> result='o'>, <Task finished coro=<DummyAsyncIterable.__anext__() done, defined at test.py:11> result='r'>]

项目详情


下载文件

下载适用于您平台的文件。如果您不确定选择哪个,请了解有关 安装包 的更多信息。

源代码分发

asynczip-1.0.7.tar.gz (3.4 kB 查看哈希值)

上传时间: 源代码

支持

AWS AWS 云计算和安全赞助商 Datadog Datadog 监控 Fastly Fastly CDN Google Google 下载分析 Microsoft Microsoft PSF 赞助商 Pingdom Pingdom 监控 Sentry Sentry 错误日志 StatusPage StatusPage 状态页面