Task manager for asyncio
Project description
Donald — A fast and minimal task manager for Asyncio.
Donald supports both synchronous and asynchronous functions. It can run coroutines across multiple event loops, schedule periodic tasks, and consume jobs from AMQP queues.
Key Features
Works with asyncio
Simple and lightweight API
Supports multiple backends: memory, redis, amqp
Periodic task scheduling (cron or intervals)
Built-in retry mechanism and failbacks
Can run multiple workers and schedulers in separate processes
Requirements
Python 3.10 or newer
Installation
Install via pip:
pip install donald
With Redis backend support:
pip install donald[redis]
Quick Start
Initialize a task manager:
import logging
from donald import Donald
# Init Donald
manager = Donald(
# Params (default values)
# -----------------------
# Setup logging
log_level=logging.INFO,
log_config=None,
# Choose a backend (memory|redis|amqp)
# memory - is only recommended for testing/local development
backend='memory',
# Backend connection params
# redis: {'url': 'redis://localhost:6379/0', 'channel': 'donald'}
# amqp: {'url': 'amqp://guest:guest@localhost:5672/', 'queue': 'donald', 'exchange': 'donald'}
backend_params={},
# Tasks worker params
worker_params={
# Max tasks in work
'max_tasks': 0,
# Tasks default params (delay, timeout)
'task_defaults': {},
# A awaitable function to run on worker start
'on_start': None
# A awaitable function to run on worker stop
'on_stop': None
# A awaitable function to run on worker error
'on_error': None
},
)
# Wrap a function to task
@manager.task()
async def mytask(*args, **kwargs):
# Do some job here
# Start the manager somewhere (on app start for example)
await manager.start()
# you may run a worker in the same process
# not recommended for production
worker = manager.create_worker()
worker.start()
# ...
# Submit the task to workers
mytask.submit(*args, **kwargs)
# ...
# Stop the manager when you need
await worker.stop()
await manager.stop()
Task Tuning
# Set delay and timeout
@tasks.task(delay=5, timeout=60)
async def delayed_task(*args, **kwargs):
...
# Automatic retries on error
@tasks.task(retries_max=3, retries_backoff_factor=2, retries_backoff_max=60)
async def retrying_task(*args, **kwargs):
...
# Define a failback function
@retrying_task.failback()
async def on_fail(*args, **kwargs):
...
# Manual retry control
@tasks.task(bind=True)
async def conditional_retry(self):
try:
...
except Exception:
if self.retries < 3:
self.retry()
else:
raise
Scheduling Tasks
@tasks.task()
async def mytask(*args, **kwargs):
...
# Run every 5 minutes
mytask.schedule('*/5 * * * *')
# Start the scheduler (not recommended in production)
manager.scheduler.start()
# Stop it when needed
manager.scheduler.stop()
Running in Production
Create a task manager in tasks.py:
from donald import Donald
manager = Donald(backend='amqp')
# Define your tasks and schedules
Start a worker in a separate process:
$ donald -M tasks.manager worker
Start the scheduler (optional):
$ donald -M tasks.manager scheduler
Bug tracker
Found a bug or have a feature request? Please open an issue: 👉 https://github.com/klen/donald/issues
Contributing
Contributions are welcome! Development happens on GitHub: 🔗 https://github.com/klen/donald
License
Licensed under a MIT license.
Project details
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
File details
Details for the file donald-2.1.0.tar.gz.
File metadata
- Download URL: donald-2.1.0.tar.gz
- Upload date:
- Size: 16.5 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.2.0 CPython/3.9.25
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
ee69316ad6c8e697f726add667ad2b673c24b6c0a71b8e4dea38f545c751601a
|
|
| MD5 |
af70c85a0a2202e42dbc81850a46fceb
|
|
| BLAKE2b-256 |
5beebbb9b96d513c5038d667a68fd3b72281240a4d900d9f7928eb6dfa2caa63
|
File details
Details for the file donald-2.1.0-py3-none-any.whl.
File metadata
- Download URL: donald-2.1.0-py3-none-any.whl
- Upload date:
- Size: 16.1 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.2.0 CPython/3.9.25
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
7c8530be3f6dc4f18bc8ba2add97dc43ade9401776ecc2eba61e0881fbd79cd2
|
|
| MD5 |
864433940a0433a6573ccead64d2c701
|
|
| BLAKE2b-256 |
83131ef6f80029185e7e3b46fc974465612400d52917fadb8e0dd13a2b741810
|