Skip to main content

Small utility for asynchronous coroutines programming in Python +3.4.

Project description

Small utility library for generic coroutine-driven, asynchronous-oriented programming in Python +3.4.

Built on top of asyncio, paco provides missing capabilities from Python stdlib to write asynchronous cooperative multitasking in a nice-ish way + some convenient functional helpers.

Note: paco is still beta.

Features

  • Simple and idiomatic API, extending Python stdlib with async coroutines gotchas.

  • Built-in configurable control-flow concurrency support.

  • Useful iterables, decorators and functors.

  • Provides coroutine-ready compose, throttle, partial, until, race and other functional helpers.

  • Asynchronous coroutine port of Python built-in functions: filter, map, dropwhile, filterfalse, reduce

  • Coroutines control flow and higher-order functions goodness.

  • Better asyncio.gather() and asyncio.wait() implementations with optional concurrency control and ordered results.

  • Good interoperability with asyncio and Python stdlib functions.

  • Partially ports Python stdlib higher-order functions and iterables to be used in async coroutines world.

  • Works with both async/await and yield from coroutines syntax.

  • Small and dependency free.

  • Compatible with Python +3.4.

Installation

Using pip package manager:

pip install paco

Or install the latest sources from Github:

pip install -e git+git://github.com/h2non/paco.git#egg=paco

API

Examples

Asynchronously execute multiple HTTP requests concurrently.

import paco
import aiohttp
import asyncio

async def fetch(url):
    async with aiohttp.ClientSession() as session:
        async with session.get(url) as resp:
            return resp

async def fetch_urls():
    urls = [
        'https://www.google.com',
        'https://www.yahoo.com',
        'https://www.bing.com',
        'https://www.baidu.com',
        'https://duckduckgo.com',
    ]

    # Map concurrent executor with concurrent limit of 3
    responses = await paco.map(fetch, urls, limit=3)

    for res in responses:
        print('Status:', res.status)

loop = asyncio.get_event_loop()
loop.run_until_complete(fetch_urls())

License

MIT - Tomas Aparicio

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

paco-0.1.1.tar.gz (17.2 kB view hashes)

Uploaded Source

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