Skip to main content

aio-task pipeline status coverage report PEP8 Downloads

Simple and reliable asynchronous tasks manager that is asyncio friendly.

Key Features

  • A simple worker interface to register coroutines as tasks.
  • A simple broker interface to produce and fetch tasks.
  • Broker and worker(s) can be setup in a single program avoiding external service dependencies (by using dummies queue and cache).
  • Task is not lost if worker crash during processing it, it's kept in the queue and re-processed until a worker acknowledge it.
  • Task exceptions are not lost: you will retrieve them in the task's result.
  • Support rabbitmq, redis and sentinel.
  • Easily hackable to add new queuing/caching services

Getting Started

Use docker-compose -f examples/docker-compose.yml up to bring up a rabbitmq and a redis to run this example.

Install

pip install aio-task

Worker → run tasks

import asyncio
from aio_task import Worker

async def addition(a, b):
    """ Task example. """
    return a + b

async def start_worker():
    rabbitmq_config = {"url": "amqp://guest:guest@localhost:5672",
                       "routing_key": "tasks_queue"}
    redis_config = {"address": "redis://localhost"}
    worker = await Worker.create("rabbitmq", rabbitmq_config,
                                 "redis", redis_config)
    worker.register_handler(addition)
    await worker.start()
    return worker

loop = asyncio.get_event_loop()
worker = loop.run_until_complete(start_worker())

try:
    loop.run_forever()
except KeyboardInterrupt:
    loop.run_until_complete(worker.close())  # gracefull shutdown

loop.close()

Broker → produce tasks

import asyncio
from aio_task import Broker

async def sample_addition():
    # setup broker
    rabbitmq_config = {"url": "amqp://guest:guest@localhost:5672",
                       "routing_key": "tasks_queue"}
    redis_config = {"address": "redis://localhost"}
    broker = await Broker.create("rabbitmq", rabbitmq_config,
                               "redis", redis_config)
    # produce task
    task_id = await broker.create_task("addition", {"a": 1, "b": 2})
    await asyncio.sleep(0.1)
    # fetch task
    task = await broker.get_task(task_id)
    print(task)
    await broker.close()  # graceful shutdown

loop = asyncio.get_event_loop()
loop.run_until_complete(sample_addition())
loop.run_until_complete(broker.close())

💡 More examples in examples/ !

Run tests

unit tests

pip install -e .[test]
pytest -xvs tests/unit

integration tests

pip install -e .[test]
docker-compose -f tests/integration/compose/docker-compose.yml up -d
IP_HOST=localhost pytest -xvs tests/integration

Metadata

Release files for aio-task 1.1.0

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

Source distribution (sdist)

Source distribution for aio-task 1.1.0
File Size Uploaded
aio-task-1.1.0.tar.gz 19.1 kB Details

Built distribution (wheel)

Table of built distributions (wheels) for aio-task 1.1.0
File Interpreter ABI Platform
aio_task-1.1.0-py3-none-any.whl Python 3 none any Details

Total release size: 47.3 kB

Release files / aio-task-1.1.0.tar.gz

Download URL aio-task-1.1.0.tar.gz
Size 19.1 kB
Tags Source
SHA-256 checksum
How to use checksums
e48131054137992f89c809e784cf4b328a459cd9aa54b1d1389d519bf92e8b02
BLAKE2b-256 checksum
How to use checksums
6becb6591a13989b0888f013cfb3bf29c9816588fee0af582c36086685071805
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/3.3.0 pkginfo/1.7.0 requests/2.25.1 setuptools/53.0.0 requests-toolbelt/0.9.1 tqdm/4.56.2 CPython/3.6.12

Release files / aio_task-1.1.0-py3-none-any.whl

Download URL aio_task-1.1.0-py3-none-any.whl
Size 28.2 kB
Tags Python 3
SHA-256 checksum
How to use checksums
08dd2fa8d423958e13126b6a97f45e6c41cfb662fc6f6e80cb029efe093b613f
BLAKE2b-256 checksum
How to use checksums
2dafed107bb4573a9ec6f4ccbe031449a2462e9cb792989408f325204785f168
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/3.3.0 pkginfo/1.7.0 requests/2.25.1 setuptools/53.0.0 requests-toolbelt/0.9.1 tqdm/4.56.2 CPython/3.6.12

Release history Release notifications | RSS feed

This release

1.1.0 This release

2 release files

1.0.3

2 release files

1.0.2

2 release files

1.0.1

2 release files

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