Skip to main content

A Celery router that uses permutation chains for task distribution

Project description

Celery Chain Router

A Celery router that uses permutation chains for efficient task distribution across workers.

Overview

The Chain Router provides a sophisticated way to distribute Celery tasks among workers using a deterministic permutation-based algorithm. This approach ensures:

  • Task Affinity: Related tasks are more likely to be processed by the same worker
  • Data Locality: Improves cache efficiency by routing related computations together
  • Balanced Distribution: Tasks are evenly distributed across all available workers
  • Worker Discovery: Automatically tracks worker availability

Why Use Chain Router Instead of Default Routing?

Celery's default routing uses a simple round-robin approach or random distribution, which can lead to several inefficiencies:

1. Improved Data Locality

Default Celery: Tasks operating on the same data may be randomly distributed across workers, causing redundant data loading.

Chain Router: Similar tasks (based on arguments) are routed to the same worker, significantly reducing:

  • Memory usage when processing related data
  • Network I/O for data transfers between tasks
  • Cache misses when processing sequential operations

2. Deterministic But Balanced Distribution

Default Celery: Round-robin is deterministic but ignores task relationships. Random routing breaks determinism.

Chain Router: Provides both deterministic routing and respects data relationships, ensuring:

  • Consistent routing across application restarts
  • Predictable performance characteristics
  • Natural load balancing without explicit configuration

3. Workload-Aware Scaling

Default Celery: Adding/removing workers disrupts task distribution patterns.

Chain Router: Worker positions in the permutation space adapt gracefully when scaling:

  • New workers receive a fair portion of the workload
  • When workers are removed, their tasks are redistributed intelligently
  • Workers can be added/removed without redistributing all tasks

4. Performance Gains

In benchmarks, systems using chain-based routing have shown:

  • Up to 30% reduction in total processing time for related tasks
  • Significantly lower memory usage when processing large datasets
  • Reduced network traffic between workers and data sources

Installation

pip install celery-chain-router

Quick Start

from celery import Celery
from celery_chain_router import ChainRouter

# Create your Celery app
app = Celery('myapp')
app.conf.update(
    broker_url='redis://localhost:6379/0',
    result_backend='redis://localhost:6379/0',
)

# Create and configure the ChainRouter
router = ChainRouter(universe_size=1000)

# Register worker queues
router.register_worker("worker1")
router.register_worker("worker2")
router.register_worker("worker3")

# Use the router for task routing
app.conf.task_routes = router

# Define your tasks as usual
@app.task
def my_task(x, y):
    return x + y

# The task will be intelligently routed based on the chain algorithm
result = my_task.delay(1, 2)

Running the Example

The package includes a complete example that demonstrates the chain router's capabilities:

  1. Start Redis:

    docker run -d -p 6379:6379 redis
    
  2. Start workers (in separate terminals):

    celery -A celery_chain_router.examples.tasks worker -n worker1@%h -Q worker1
    celery -A celery_chain_router.examples.tasks worker -n worker2@%h -Q worker2
    celery -A celery_chain_router.examples.tasks worker -n worker3@%h -Q worker3
    
  3. Run the example:

    python -m celery_chain_router.examples.simple_example
    

How It Works

The Chain Router works by:

  1. Creating a deterministic permutation of a numerical universe
  2. Hashing tasks to map them to positions in this universe
  3. Assigning workers to positions in the same universe
  4. Routing tasks to workers based on their proximity in the permutation chain

This approach ensures that similar tasks (with similar inputs) are routed to the same worker, improving data locality and cache efficiency.

Ideal Use Cases

Chain Router excels in scenarios where:

  • Tasks frequently operate on related data
  • Data loading has significant overhead
  • Worker caching can improve performance
  • Predictable routing is desirable
  • Processing involves sequential operations on the same dataset

Configuration Options

  • universe_size: Size of the permutation universe (default: 10000)
  • seed: Random seed for deterministic permutation (default: 42)
  • persistent_file: Path to file for persisting worker positions
  • reset_persistent: Whether to reset worker positions on initialization

License

MIT License - See LICENSE file for details.

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

celery_chain_router-0.1.0.tar.gz (12.6 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

celery_chain_router-0.1.0-py3-none-any.whl (10.7 kB view details)

Uploaded Python 3

File details

Details for the file celery_chain_router-0.1.0.tar.gz.

File metadata

  • Download URL: celery_chain_router-0.1.0.tar.gz
  • Upload date:
  • Size: 12.6 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.2.0 CPython/3.13.7

File hashes

Hashes for celery_chain_router-0.1.0.tar.gz
Algorithm Hash digest
SHA256 cfadbce52b0480df9fa2fb845c3fe2aa7005ae5b37705a2d710b0dec3e89d94e
MD5 ce5d23b8dc8b86d1b57ae208f8464345
BLAKE2b-256 a7b0a1009d3bc9894459236875816375fabb5a08b96e85dff91f489cbc1da6fb

See more details on using hashes here.

File details

Details for the file celery_chain_router-0.1.0-py3-none-any.whl.

File metadata

File hashes

Hashes for celery_chain_router-0.1.0-py3-none-any.whl
Algorithm Hash digest
SHA256 60a3ca83e648cfdc1db49ac3330ae984e5b3bfe1fc07aaf217742f6c8d7eb17d
MD5 ca5629615a1551ca7e139ac47c97cd5d
BLAKE2b-256 af8caf9d9fdea6efd0892881d9c0ef334e654974a6a8be6aa13dd666487bd9c8

See more details on using hashes here.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page