aioitertools: itertools and builtins for AsyncIO

0.13.0 · active · verified Sat Mar 28

aioitertools provides asynchronous versions of standard library `itertools` and `builtins` for AsyncIO and mixed iterables. It offers a unified interface for both standard and async iterators, wrapping standard iterables in async generators. The current version is 0.13.0, and it follows a feature release cadence.

Warnings

Install

Imports

Quickstart

This quickstart demonstrates how to use `aioitertools.iter` to get an async iterator from both synchronous and asynchronous iterables, `aioitertools.next` to retrieve the next item, and `aioitertools.map` to apply an asynchronous function concurrently over an iterable.

import asyncio
from aioitertools import iter, next, map

async def async_generator():
    for i in range(3):
        yield i
        await asyncio.sleep(0.01)

async def process_item(item):
    # Simulate an async operation
    await asyncio.sleep(0.005)
    return item * 2

async def main():
    # Using aioitertools.iter with a standard iterable
    it_sync = iter([1, 2, 3])
    first_item = await next(it_sync)
    print(f"First item from sync: {first_item}")

    # Using aioitertools.iter with an async iterable
    it_async = iter(async_generator())
    print("Items from async generator:")
    async for item in it_async:
        print(f"  {item}")

    # Using aioitertools.map for concurrent async operations
    urls = ["url1", "url2", "url3"]
    async def fetch_url(url):
        # Replace with actual async HTTP request
        await asyncio.sleep(0.01)
        return f"Processed {url}"

    print("\nMapping async functions:")
    async for result in map(fetch_url, urls):
        print(f"  {result}")

if __name__ == "__main__":
    asyncio.run(main())

view raw JSON →