Skip to main content

Background Workflows

A pluggable framework for managing background tasks in Python. Supports both local task execution with threading and distributed task execution using Celery.

Features

  • Task orchestration with support for Azure Table Storage or SQLite for task persistence.
  • Queue management for local in-memory queues or Celery for distributed task processing.
  • Dynamic task creation and registration for extensible workflow management.

Additional Documentation

For more detailed documentation, please refer to the following sections:

  • Summary: summary.md – A brief summary of the framework and its key components.
  • Controller Documentation: controller.md – Detailed information about the controller components and how they work.
  • Storage Documentation: storage.md – Information on task storage options, including Azure and SQLite.
  • Task Documentation: tasks.md – Overview of task management, including how to define and run tasks.
  • Utils Documentation: utils.md – A guide to the utility functions and classes used in the framework.
  • Overall Framework Diagram: overal_diagram.md – A high-level diagram illustrating the components and their relationships.

Installation

You can install the background_workflows library via pip:

pip install background_workflows

Usage

1. Initialize Task Store and Queue Backend

from background_workflows.storage.tables.task_store_factory import TaskStoreFactory
from background_workflows.storage.queue.local_queue_backend import LocalQueueBackend

# Initialize task store and queue backend
factory = TaskStoreFactory(store_mode="sqlite")
task_store = factory.get_task_store()
queue_backend = LocalQueueBackend()

2. Start a Background Activity

from background_workflows.utils.workflow_client import WorkflowClient

workflow_client = WorkflowClient(task_store, queue_backend)
workflow_client.start_activity("MY_CUSTOM_TASK", resource_id="1234", payload={"data": "value"})

3. Monitor Task Status

status = workflow_client.get_status(row_key="unique-row-id", resource_id="1234")
print(f"Task Status: {status}")

Configuration

Environment Variables

To configure the library, set the following environment variables:

  • STORE_MODE: Choose between "azure" or "sqlite" for task storage.
  • AZURE_STORAGE_CONNECTION_STRING: Required for Azure storage mode.
  • SQLITE_DB_PATH: Path to the SQLite database (default is local_tasks.db).
  • CELERY_BROKER_URL: The URL for the Celery message broker (e.g., Redis).
  • CELERY_BACKEND_URL: The URL for the Celery result backend (e.g., Redis).

Example:

export STORE_MODE=azure
export AZURE_STORAGE_CONNECTION_STRING="your_connection_string_here"

Controllers

The framework provides two key controllers for managing task execution:

1. MainController

  • Purpose: Polls queues and executes tasks in a local thread pool.
  • Configuration: Can be configured to use a specific number of threads and CPU usage threshold.
  • Usage:
from background_workflows.controller.main.main_controller import MainController

controller = MainController(task_store, queue_backend)
controller.run()  # Starts the continuous polling and task execution loop

1. CeleryController

  • Purpose: Delegates task processing to Celery workers, removing the need for local polling.
  • Configuration: Requires a Celery setup and message broker.
  • Usage:
from background_workflows.controller.celery.celery_controller import CeleryController

controller = CeleryController(task_store, celery_queue_backend)
controller.run_once()  # Executes a single pass of task handling

Contributing

We welcome contributions to the background_workflows library! To contribute:

  1. Fork the repository.
  2. Create a new branch for your feature or bug fix.
  3. Make your changes.
  4. Run tests to ensure everything works.
  5. Submit a pull request with a description of the changes you’ve made.

Running Tests

To run the tests, you can use pytest:

pytest tests/

License

This project is licensed under the MIT License - see the LICENSE file for details.

Metadata

Release files for background-workflows 0.3.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 background-workflows 0.3.0
File Size Uploaded Provenance Actions
background_workflows-0.3.0.tar.gz 47.7 kB Without provenance Details for background_workflows-0.3.0.tar.gz

Built distribution (wheel)

Table of built distributions (wheels) for background-workflows 0.3.0
File Interpreter ABI Platform Actions
background_workflows-0.3.0-py3-none-any.whl Python 3 none any Details for background_workflows-0.3.0-py3-none-any.whl

Total release size: 124.9 kB

Release files / background_workflows-0.3.0.tar.gz

Download URL background_workflows-0.3.0.tar.gz
Size 47.7 kB
Tags Source
SHA-256 checksum
How to use checksums
51054d86c4a58ba7756a2824bc7e2c47beb269d5a827cd42e83dc4542c026485
BLAKE2b-256 checksum
How to use checksums
53ca4fb82dc7f6bc5602176b6eab7dd0097d289807575fe56ee24a6b2a87a009
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/6.1.0 CPython/3.10.4

Release files / background_workflows-0.3.0-py3-none-any.whl

Download URL background_workflows-0.3.0-py3-none-any.whl
Size 77.2 kB
Tags Python 3
SHA-256 checksum
How to use checksums
9b97159267a4cf93f3f3730088159c460ac6deb7f6862e1b8ce0327409fa2adf
BLAKE2b-256 checksum
How to use checksums
f6dcae908d8adea168be46391ad68c49be176b75f41036ce13e196fd87371339
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/6.1.0 CPython/3.10.4

Security for background-workflows 0.3.0

Provenance

Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.

No provenance found

None of the files in this release were uploaded with provenance metadata.

A note on package security

PyPI is a repository for distributing packages, not a service for auditing them. While third-party security researchers and our staff do their best to detect and remove malicious packages, PyPI cannot guarantee the quality, security or suitability of any given package.

To learn more about protecting yourself from malicious actors, visit our package security documentation.

Release history Release notifications | RSS feed

This release

0.3.0 This release

2 release files No provenance

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