Skip to main content

A pool of coroutine functions.

Project description

asyncio-pool-ng

PyPI version Python Versions License: MIT Code style: black

About

AsyncioPoolNG takes the ideas used in asyncio-pool and wraps them around an asyncio.TaskGroup.

AsyncioPool has three main functions spawn, map, and itermap.

  1. spawn: Schedule an async function on the pool and get a future back which will eventually have either the result or the exception from the function.
  2. map: Spawn an async function for each item in an iterable object, and return a set containing a future for each item.
  • asyncio.wait() can be used to wait for the set of futures to complete.
  • When the AsyncioPool closes, it will wait for all tasks to complete. All pending futures will be complete once it is closed.
  1. itermap: Works similarly to map but returns an Async Generator which yields each future as it completes.

Differences from asyncio-pool

  1. asyncio-pool-ng implements Python typing and passes validation checks with mypy's strict mode. This helps IDEs and static type checkers know what type of result to expect when getting data from a completed future.
  2. asyncio-pool uses callbacks to process data before returning it; asyncio-pool-ng only returns Future instances directly. The future will contain either a result or an exception which can then be handled as needed.
  3. While asyncio-pool schedules Coroutine instances directly, asyncio-pool-ng takes the callable and arguments, and creates the Coroutine instance at execution time.

Example

import asyncio
import logging
from random import random

from asyncio_pool import AsyncioPool


logging.basicConfig(level=logging.INFO)


async def worker(number: int) -> int:
    await asyncio.sleep(random() / 2)
    return number * 2


async def main() -> None:
    result: int = 0
    results: list[int] = []

    async with AsyncioPool(2) as pool:
        """spawn task and wait for the results"""
        result = await pool.spawn(worker, 5)
        assert result == 10
        logging.info(f"results for pool.spawn(worker, 5): {result}")

        """spawn task and get results later"""
        future: asyncio.Future[int] = pool.spawn(worker, 5)

        # do other stuff

        result = await future
        assert result == 10

        """map an async function to a set of values"""
        futures: set[asyncio.Future[int]] = pool.map(worker, range(10))
        await asyncio.wait(futures)
        results = [x.result() for x in futures]
        logging.info(f"results for pool.map(worker, range(10)): {results}")
        results.sort()
        assert results == [0, 2, 4, 6, 8, 10, 12, 14, 16, 18]

        """iterate futures as they complete"""
        logging.info("results for pool.itermap(worker, range(10)):")
        results = []
        async for future in pool.itermap(worker, range(10)):
            results.append(future.result())
            logging.info(f"> {future.result()}")

        results.sort()
        assert results == [0, 2, 4, 6, 8, 10, 12, 14, 16, 18]


asyncio.run(main())

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

asyncio_pool_ng-0.8.1.tar.gz (7.0 kB view details)

Uploaded Source

Built Distribution

asyncio_pool_ng-0.8.1-py3-none-any.whl (7.4 kB view details)

Uploaded Python 3

File details

Details for the file asyncio_pool_ng-0.8.1.tar.gz.

File metadata

  • Download URL: asyncio_pool_ng-0.8.1.tar.gz
  • Upload date:
  • Size: 7.0 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: poetry/1.8.2 CPython/3.11.8 Linux/5.15.146.1-microsoft-standard-WSL2

File hashes

Hashes for asyncio_pool_ng-0.8.1.tar.gz
Algorithm Hash digest
SHA256 b5eb07ce36822b1c15832bd0d6c450671ebcd2d7303a9dac29f36b8c6b667a7b
MD5 bc875afb7b3fc3d921af1d717b3c8211
BLAKE2b-256 985f6d473dd82f3f6d9af977343a5d38d4ffc9c948160fa4006ffd9641233de5

See more details on using hashes here.

File details

Details for the file asyncio_pool_ng-0.8.1-py3-none-any.whl.

File metadata

  • Download URL: asyncio_pool_ng-0.8.1-py3-none-any.whl
  • Upload date:
  • Size: 7.4 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? No
  • Uploaded via: poetry/1.8.2 CPython/3.11.8 Linux/5.15.146.1-microsoft-standard-WSL2

File hashes

Hashes for asyncio_pool_ng-0.8.1-py3-none-any.whl
Algorithm Hash digest
SHA256 8dba804c078b2a27b7885980d9b1cf99eaa077f00c07a4bf32a67233f09a1d7c
MD5 e0a0bd1a8a6a396adacec7e39c52842d
BLAKE2b-256 e2d73db4d6bbf8a77e5a7b7ada9046343d6e3a16a95e8d400808637041040a2f

See more details on using hashes here.

Supported by

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