Skip to main content

Because asyncio.gather() is not enough!

Project description

aioplus

PyPI Version PyPI Downloads License Python Version Documentation

Key Features

  • As easy as built-ins - but asynchronous;
  • Early returns never cause unawaited coroutine warnings;
  • Nearly the same API as the Python 3.13 standard blocking API.

Getting Started

Installation

The library is available as aioplus on PyPI:

pip install aioplus

Usage

aall

For more, see the documentation.

import asyncio

from aioplus import aall, arange

async def main() -> None:
    """Run the program."""
    aiterable = (num > 0 async for num in arange(2304))
    flg = await aall(aiterable)

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

aany

For more, see the documentation.

import asyncio

from aioplus import aany, arange

async def main() -> None:
    """Run the program."""
    aiterable = (num % 2 == 0 async for num in arange(2304))
    flg = await aany(aiterable)

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

abatched

For more, see the documentation.

import asyncio

from aioplus import abatched, arange

async def main() -> None:
    """Run the program."""
    async for batch in abatched(arange(23), n=4):
        print(batch)

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

acount

For more, see the documentation.

import asyncio

from aioplus import acount

async def main() -> None:
    """Run the program."""
    async for num in acount(start=23, step=4):
        print(num)

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

acycle

For more, see the documentation.

import asyncio

from aioplus import acycle, arange

async def main() -> None:
    """Run the program."""
    async for num in acycle(arange(23)):
        print(num)

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

aenumerate

For more, see the documentation.

import asyncio

from aioplus import aenumerate, arange

async def main() -> None:
    """Run the program."""
    async for index, num in aenumerate(arange(2304)):
        print(index, num)

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

afirst

For more, see the documentation.

import asyncio

from aioplus import afirst, arange

async def main() -> None:
    """Run the program."""
    aiterable = arange(4, 23)
    num = await afirst(aiterable)
    print(f"aiterable[0] = {num}")

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

ahead

For more, see the documentation.

import asyncio

from aioplus import ahead, arange

async def main() -> None:
    """Run the program."""
    async for num in ahead(arange(23), n=4):
        print(num)

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

aislice

For more, see the documentation.

import asyncio

from aioplus import aislice, arange

async def main() -> None:
    """Run the program."""
    async for num in aislice(arange(23), 4):
        print(num)

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

alast

For more, see the documentation.

import asyncio

from aioplus import alast, arange

async def main() -> None:
    """Run the program."""
    aiterable = arange(4, 23)
    num = await alast(aiterable)
    print(f"aiterable[-1] = {num}")

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

alen

For more, see the documentation.

import asyncio

from aioplus import alen, arange

async def main() -> None:
    """Run the program."""
    aiterable = arange(2304)
    length = await alen(aiterable)
    print(f"len(aiterable) == {length}")

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

anth

For more, see the documentation.

import asyncio

from aioplus import anth, arange

async def main() -> None:
    """Run the program."""
    aiterable = arange(23)
    value = await anth(aiterable, n=4)
    print(f"value = {value}")

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

apairwise

For more, see the documentation.

import asyncio

from aioplus import apairwise, arange

async def main() -> None:
    """Run the program."""
    async for left, right in apairwise(arange(23)):
        print(f"pair = ({left}, {right})")

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

arange

For more, see the documentation.

import asyncio

from aioplus import arange

async def main() -> None:
    """Run the program."""
    async for num in arange(2304):
        print(num)

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

arepeat

For more, see the documentation.

import asyncio

from aioplus import arepeat

async def main() -> None:
    """Run the program."""
    async for num in arepeat(23, times=4):
        print(num)

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

areversed

For more, see the documentation.

import asyncio

from aioplus import arange, areversed

async def main() -> None:
    """Run the program."""
    async for num in areversed(arange(2304)):
        print(num)

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

atail

For more, see the documentation.

import asyncio

from aioplus import arange, atail

async def main() -> None:
    """Run the program."""
    async for num in atail(arange(23), n=4):
        print(num)

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

atriplewise

For more, see the documentation.

import asyncio

from aioplus import arange, atriplewise

async def main() -> None:
    """Run the program."""
    async for left, middle, right in atriplewise(arange(23)):
        print(f"window = ({left}, {middle}, {right})")

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

awaitify

For more, see the documentation.

import asyncio

from aioplus import awaitify

def func(num: int) -> None:
    """Print the number."""
    print(f"Num: {num}")

async def main() -> None:
    """Run the program."""
    afunc = awaitify(func)
    await afunc(num=2304)

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

awindowed

For more, see the documentation.

import asyncio

from aioplus import arange, awindowed

async def main() -> None:
    """Run the program."""
    async for window in awindowed(arange(23), n=4):
        print(f"window = {window}")

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

License

MIT License, Copyright (c) 2025 Sergei Y. Bogdanov. See LICENSE file.

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

aioplus-0.2.0.tar.gz (11.4 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

aioplus-0.2.0-py3-none-any.whl (25.4 kB view details)

Uploaded Python 3

File details

Details for the file aioplus-0.2.0.tar.gz.

File metadata

  • Download URL: aioplus-0.2.0.tar.gz
  • Upload date:
  • Size: 11.4 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: poetry/2.1.3 CPython/3.13.5 Windows/10

File hashes

Hashes for aioplus-0.2.0.tar.gz
Algorithm Hash digest
SHA256 98da72415f9ecce19712d79cc103c5f9a665bd9dca6bdb16db4aeb26c9b7825a
MD5 039a13b266fffc7d7ac5a955558dcd25
BLAKE2b-256 ddb9f7b88449b550ee26e97c8d77123c3841b5d13cd2849f14b5d8bd8d2c3038

See more details on using hashes here.

File details

Details for the file aioplus-0.2.0-py3-none-any.whl.

File metadata

  • Download URL: aioplus-0.2.0-py3-none-any.whl
  • Upload date:
  • Size: 25.4 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? No
  • Uploaded via: poetry/2.1.3 CPython/3.13.5 Windows/10

File hashes

Hashes for aioplus-0.2.0-py3-none-any.whl
Algorithm Hash digest
SHA256 d8726d4ff2b1602dfe799d55d13bd4c6ee10aaa4571ce383771d3e20c1b8e167
MD5 49e4f2d6f9adf132ebf11ce9e9565493
BLAKE2b-256 fac5bd64b191889b8f64871127c405b1b03bf3284a110c362d787299e70b3881

See more details on using hashes here.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page