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
asynciowith automatic sync function wrapping
Installation
pip install --pre affinity-router
Note: The
--preflag 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)
| File | Size | Uploaded | Provenance | |
|---|---|---|---|---|
| affinity_router-0.1.0a1.tar.gz | 989.7 kB | With provenance | Details |
Built distribution (wheel)
| File | Interpreter | ABI | Platform | Reset |
|---|---|---|---|---|
| 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 logRelease 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 logSecurity 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.
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 logA 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.