Skip to main content

Muffin-Donald

Muffin-Donald is a plugin for the Muffin framework that provides support for asynchronous background tasks, workers, and scheduling.

Tests Status PyPI Version Python Versions

Features

  • ✅ Register async tasks
  • ✅ Run background workers
  • ✅ Schedule periodic tasks (cron or intervals)
  • ✅ RPC-style submit and wait for result
  • ✅ Muffin plugin integration with lifecycle management

Requirements

  • python >= 3.11
  • muffin >= 0.60.0
  • donald >= 0.1.0

Installation

pip install muffin-donald

Usage

Initialize the plugin:

import muffin
from muffin_donald import Plugin

app = muffin.Application("example")

tasks = Plugin(app, backend="redis", backend_params={
    "url": "redis://localhost:6379/0"
}, start_worker=True, start_scheduler=True)

Register a task:

@tasks.task()
async def my_task(x, y):
    return x + y

Submit task for background execution:

my_task.submit(1, 2)

Submit and wait for result (RPC style):

result = await my_task.submit_and_wait(1, 2)
print("Result:", result)  # Result: 3

Schedule a periodic task:

@tasks.task()
async def periodic_task():
    print("Periodic task executed")

periodic_task.schedule("*/5 * * * *")  # every 5 minutes

Handle task errors with on_error:

@tasks.on_error
async def handle_error(exc):
    print("Task error:", exc)

Lifecycle hooks:

@tasks.on_start
async def startup():
    print("Tasks manager started")

@tasks.on_stop
async def shutdown():
    print("Tasks manager stopped")

Healthcheck commands:

muffin <app> tasks-worker-health
muffin <app> tasks-scheduler-health
  • Returns exit code 0 if healthy
  • Returns exit code 1 if unhealthy

Commands

Command Description
tasks-worker Run the worker process
tasks-scheduler Run the scheduler
tasks-worker-health Check worker health
tasks-scheduler-health Check scheduler health

Configuration Options

You can configure the plugin via parameters or Muffin settings (with TASKS_ prefix):

Name Default Description
log_level INFO Logger level
log_config None Logger config
backend memory Backend: memory, redis, amqp
backend_params {} Backend connection params
worker_params {} Worker params
start_worker False Auto start a worker on startup
start_scheduler False Auto start a scheduler on startup

Example in Muffin settings:

TASKS_BACKEND = "redis"
TASKS_BACKEND_PARAMS = {"url": "redis://localhost:6379/0"}
TASKS_START_WORKER = True
TASKS_START_SCHEDULER = True

Testing

Example using manage_lifespan:

import pytest
from asgi_tools.tests import manage_lifespan

async def test_tasks(app, tasks):
    async with manage_lifespan(app):
        result = await my_task.submit_and_wait(1, 2)
        assert result == 3

Bug Tracker

Please report issues or suggestions at https://github.com/klen/muffin-donald/issues

Contributing

Development happens at: https://github.com/klen/muffin-donald

Contributors

  • klen (Kirill Klenov)

License

Licensed under the MIT license.

Metadata

Release files for muffin-donald 2.0.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 muffin-donald 2.0.0
File Size Uploaded
muffin_donald-2.0.0.tar.gz 4.1 kB Details

Built distribution (wheel)

Table of built distributions (wheels) for muffin-donald 2.0.0
File Interpreter ABI Platform
muffin_donald-2.0.0-py3-none-any.whl Python 3 none any Details

Total release size: 8.5 kB

Release files / muffin_donald-2.0.0.tar.gz

Download URL muffin_donald-2.0.0.tar.gz
Size 4.1 kB
Tags Source
SHA-256 checksum
How to use checksums
2769edb5150d32ab0915a1822f01a08708a8f456a19ef1c5c72adf8fa0dd7067
BLAKE2b-256 checksum
How to use checksums
144cadf5019ae835967b4a120a467598b98d8b32d61dea700901267460b80b86
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via uv/0.11.24 {"installer":{"name":"uv","version":"0.11.24","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"Ubuntu","version":"24.04","id":"noble","libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":true}

Release files / muffin_donald-2.0.0-py3-none-any.whl

Download URL muffin_donald-2.0.0-py3-none-any.whl
Size 4.4 kB
Tags Python 3
SHA-256 checksum
How to use checksums
990730ec09fbad94e187eb87a43d64b1a46a13525a123d91d19cd232bdbf5ea6
BLAKE2b-256 checksum
How to use checksums
d443098d11ffb2a8d028078e1425ff6afbf240ed863e32241d96c0d287e9e32d
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via uv/0.11.24 {"installer":{"name":"uv","version":"0.11.24","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"Ubuntu","version":"24.04","id":"noble","libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":true}

Release history Release notifications | RSS feed

This release

2.0.0 This release

2 release files

1.0.4

2 release files

1.0.3

2 release files

1.0.2

2 release files

1.0.1

2 release files

1.0.0

2 release files

0.11.0

2 release files

0.10.4

2 release files

0.10.3

2 release files

0.9.2

2 release files

0.9.1

2 release files

0.9.0

2 release files

0.8.7

2 release files

0.8.6

2 release files

0.8.5

2 release files

0.8.4

2 release files

0.8.3

2 release files

0.8.2

2 release files

0.8.1

2 release files

0.8.0

2 release files

0.7.0

2 release files

0.6.0

2 release files

0.5.3

2 release files

0.5.1

2 release files

0.5.0

2 release files

0.4.0

2 release files

0.3.0

2 release files

0.2.2

2 release files

0.2.1

2 release files

0.2.0

2 release files

0.1.2

2 release files

0.1.1

2 release files

0.1.0

2 release files

0.0.8

2 release files

0.0.7

2 release files

0.0.6

2 release files

0.0.4

2 release files

0.0.3

2 release files

0.0.2

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