Skip to main content
Pre-release

This release is a pre-release and may not be stable for production use.

AffinityRouter

Intelligent task routing with data locality for distributed systems.

Overview

AffinityRouter is a Python library for smart task routing in distributed systems. Instead of distributing work agnostically (e.g., Round-Robin), it prioritizes Data Locality using consistent hashing, ensuring tasks for the same resource always reach the same worker — maximizing in-memory cache hits and minimizing database pressure.

Key Features

  • Consistent Hashing — Tasks for the same resource always go to the same worker
  • Dynamic Cluster Management — Workers register/deregister with heartbeats
  • Native Idempotency — Built-in duplicate execution prevention
  • Pluggable Architecture — Swap transport, registry, and state backends
  • Async-First — Built on asyncio with automatic sync function wrapping

Installation

pip install --pre affinity-router

Note: The --pre flag is required to install this alpha pre-release.

Quick Start

from affinity_router import Router, Worker

# --- Router side ---
router = Router.from_redis(redis_url="redis://localhost:6379")
await router.submit(
    routing_key="ticket:12345",
    task_name="process_payment",
    payload={"amount": 100, "currency": "EUR"},
)

# --- Worker side ---
worker = Worker.from_redis(redis_url="redis://localhost:6379", worker_id="worker-1")

@worker.task("process_payment")
async def process_payment(task):
    return {"status": "paid"}

await worker.start()

Transport Backends

AffinityRouter supports multiple transport backends:

Redis Streams (default)

Best for production deployments with resilience requirements.

from affinity_router import Router, Worker
from affinity_router.transport import RedisStreamTransport

router = Router.from_redis(redis_url="redis://localhost:6379")

Direct TCP

Best for maximum throughput in controlled environments where workers have direct network access.

from affinity_router.transport import DirectTcpTransport

transport = DirectTcpTransport(registry=registry, host="0.0.0.0", port=8000)

Batched TCP

Best for high-throughput scenarios with batching to reduce syscall overhead.

from affinity_router.transport import BatchedTcpTransport

transport = BatchedTcpTransport(
    registry=registry,
    batch_size=100,
    flush_interval_ms=10
)
Transport Throughput Latency Resilience Use Case
Redis Streams Medium Medium High Production, distributed
Direct TCP High Low Low Controlled networks
Batched TCP Highest Medium Low High-throughput batch jobs

⚠️ Disclaimer

This software is provided "AS IS", without warranty of any kind, express or implied. The authors and contributors shall not be held liable for any damages, data loss, service disruptions, or any other issues arising from the use of this software. Users are solely responsible for evaluating the suitability of this software for their intended use case.

By using this software, you acknowledge that you have read and understood the MIT License under which it is distributed.

🚧 Alpha Status

This is an alpha release (0.1.0a1).

This version may contain incomplete implementations and undocumented critical bugs. The API surface is subject to breaking changes without prior notice.

It is strongly recommended to avoid using this package in real development or production environments.

License

MIT

Metadata

Release files for affinity-router 0.1.0a1

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

Source distribution (sdist)

Source distribution for affinity-router 0.1.0a1
File Size Uploaded Provenance
affinity_router-0.1.0a1.tar.gz 989.7 kB With provenance Details

Built distribution (wheel)

Table of built distributions (wheels) for affinity-router 0.1.0a1
File Interpreter ABI Platform
affinity_router-0.1.0a1-py3-none-any.whl Python 3 none any Details

Total release size: 1.0 MB

Release files / affinity_router-0.1.0a1.tar.gz

Download URL affinity_router-0.1.0a1.tar.gz
Size 989.7 kB
Tags Source
SHA-256 checksum
How to use checksums
bc771b6b92cb4ccef1404f5beaaf90496e99206ba8ff4f85873282536d7119c3
BLAKE2b-256 checksum
How to use checksums
671cb86a6b52e287c97cb6db5b247b8ae8d5af039298da170f7f7c2e7ff17cfd
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/6.1.0 CPython/3.13.7

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.

PyPI Publish Attestation

PyPI verified that this artifact, at this checksum, originated from the publisher listed below.

Signed by GitHub Actions, verified by PyPI on Mar 9, 2026.

Transparency log

Release files / affinity_router-0.1.0a1-py3-none-any.whl

Download URL affinity_router-0.1.0a1-py3-none-any.whl
Size 32.5 kB
Tags Python 3
SHA-256 checksum
How to use checksums
fe6f2ccb873943b357bffc83c5ea80e2795d418126abf0c855aa31a7adfc12f0
BLAKE2b-256 checksum
How to use checksums
9d083b5a2ce48aca6061ddd562378c6b58bdd1abbc672031507b7008da801016
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/6.1.0 CPython/3.13.7

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.

PyPI Publish Attestation

PyPI verified that this artifact, at this checksum, originated from the publisher listed below.

Signed by GitHub Actions, verified by PyPI on Mar 9, 2026.

Transparency log

Security for affinity-router 0.1.0a1

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.

Full provenance

All 2 files in this release have been uploaded with provenance metadata.

Select from 2 files

Attestation for affinity_router-0.1.0a1.tar.gz

PyPI Publish Attestation

PyPI verified that this artifact, at this checksum, originated from the publisher listed below.

Signed by GitHub Actions, verified by PyPI on Mar 9, 2026.

Transparency log

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
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