Skip to main content

AsyncZip is a simple zip like function working with asynchronous iterables. It look, in many aspects, like asyncio.wait.

Usage

Given n asynchronous iterables, AsyncZip(*aiterables) gives a new asynchronous iterable iterating over all of them. Like asyncio.wait, it’s possible to wait for any iterable to yield something using the option FIRST_COMPLETED, or to wait for all of them using the option ALL_COMPLETED.

class AsyncZip

def __init__(self, *asynchronous_iterables, loop=None, yield_when=FIRST_COMPLETED):
  • asynchronous_iterables: A collection of asynchronous iterables

  • loop: Optional named parameter, to give an specific event loop

  • yield_when: Like return_when from asyncio.wait, FIRST_COMPLETED or ALL_COMPLETED.

FIRST_COMPLETED, ALL_COMPLETED

The two values yield_when can take, FIRST_COMPLETED and ALL_COMPLETED tell, like for asyncio.wait, when AsyncZip should yield. Defaults to FIRST_COMPLETED.

  • FIRST_COMPLETED

Like select, where AsyncZip yields each time any iterable yields, as soon as possible.

  • ALL_COMPLETED

It’s the classical zip mode, where AsyncZip waits for a value for each iterator before yielding them all in a single loop.

Example usage

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())

Gives:

[<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'>]

Release files for asynczip 1.0.7

For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.

Source distribution (sdist)

Source distribution for asynczip 1.0.7
File Size Uploaded
asynczip-1.0.7.tar.gz 3.4 kB Details

Release files / asynczip-1.0.7.tar.gz

Download URL asynczip-1.0.7.tar.gz
Size 3.4 kB
Tags Source
SHA-256 checksum
How to use checksums
eea2b2375256dce6da2457d79212deb1c7861146238853be6c5c15aa5be8ebfc
BLAKE2b-256 checksum
How to use checksums
867f47f404eae0286669a02bd929c220bca6fadf63d38672c935075885b2026a
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No

Release history Release notifications | RSS feed

This release

1.0.7 This release

1 release file

1.0.6

1 release file

1.0.5

1 release file

1.0.4

1 release file

1.0.3

1 release file

1.0.2

1 release file

1.0.1

1 release file

1.0

1 release file

Anthropic, PBC Visionary sponsor Bloomberg Visionary sponsor Hudson River Trading Visionary sponsor Meta Visionary sponsor NVIDIA Visionary sponsor Microsoft Sustainability sponsor Depot Continuous Integration AWS Cloud computing and Security Sponsor Datadog Monitoring Fastly CDN Google Download Analytics Sentry Error logging StatusPage Status page