Skip to main content

AIMD-based adaptive throttling for asyncio, thread pools, and Kafka consumers — like a semaphore with a brain.

Project description

ACE Documentation Index

ACE v0.1.0 - Adaptive Concurrency Engine


Getting Started (30 minutes)

  1. Install - pip install ace-concurrency
  2. Quick Start - Run async example
  3. Configuration - Customize AIMD parameters
  4. Observability - Monitor via JSON logs

Core Concepts

System Signals

Monitored every 2 seconds:

  • CPU utilization (%)
  • Memory utilization (%)
  • Event loop lag (milliseconds)
  • Queue depth (tasks waiting)
  • Kafka consumer lag (optional)

Decision Types

  • INCREASE: Proactive (low load) or reactive (queue catching up)
  • DECREASE: High CPU/memory or queue overflow
  • HOLD: Steady state, system healthy

Integration Guides

Async Tasks

Best for: I/O-bound work (API calls, database queries)

async with ACEAsyncioManager(config) as mgr:
    await mgr.submit(your_async_task())

Thread Pools

Best for: CPU-bound work (calculations, data processing)

with ACEThreadPoolManager(config) as mgr:
    mgr.submit(your_sync_function)

Kafka Consumers

Best for: Event streaming with backpressure

async with ACEKafkaConsumerManager(config, "topic") as mgr:
    await mgr.process_async(handler)

Configuration Guide

Basic Configuration

config = AIMDConfig(
    min_limit=1,
    max_limit=100,
    initial_limit=10,
)

Advanced Configuration

config = AIMDConfig(
    # Concurrency bounds
    min_limit=5,
    max_limit=200,
    initial_limit=50,

    # AIMD parameters
    increase_step=5,           # More aggressive increase
    decrease_factor=0.3,       # Faster decrease

    # Thresholds (CPU/Memory %)
    cpu_threshold=75.0,
    memory_threshold=80.0,
    cpu_increase_threshold=30.0,      # Earlier proactive scaling
    memory_increase_threshold=40.0,

    # Timing (seconds)
    adjustment_interval=1,     # More frequent decisions
    cooldown_period=10,        # Longer wait after decrease
)

Monitoring & Observability

Structured JSON Logs

{
  "timestamp": "2026-01-16T14:30:45Z",
  "level": "INFO",
  "message": "AIMD decision",
  "decision": "INCREASE",
  "current_limit": 10,
  "new_limit": 12,
  "signals": {
    "cpu_percent": 35.5,
    "memory_percent": 42.3,
    "queue_depth": 5,
    "event_loop_lag_ms": 2.1
  }
}

Metrics to Track

  • Current concurrency limit
  • Active task count
  • CPU/Memory utilization
  • Decision frequency (INCREASE/DECREASE/HOLD)
  • System response time

Version Information

Property Value
Package ace-concurrency
Version 0.1.0
Python 3.8+
License MIT
Status Production-Ready
PyPI https://pypi.org/project/ace-concurrency/

Common Tasks

Task: Change concurrency limits

# During runtime (if you need dynamic adjustment)
with ACEAsyncioManager(config) as mgr:
    # Limits controlled automatically by AIMD
    # To override, set directly:
    # Not recommended - trust AIMD algorithm
    pass

Task: Access current limit

async with ACEAsyncioManager(config) as mgr:
    print(f"Current limit: {mgr.current_limit}")
    print(f"Active tasks: {mgr.active_tasks}")

Task: Custom signal collection

from ace.core.signals import SignalCollector

collector = SignalCollector()
collector.set_queue_depth(len(my_queue))
signals = await collector.collect_all_async()

Task: Batch multiple AIMD managers

# Multiple independent managers (recommended for isolation)
async with ACEAsyncioManager(config1) as mgr1:
    async with ACEAsyncioManager(config2) as mgr2:
        # Separate control loops
        pass

Support Resources

  • Bug Reports: GitHub Issues
  • Feature Requests: GitHub Discussions
  • Code Examples: See intergrations/ directory

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

ace_concurrency-0.1.1.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.

ace_concurrency-0.1.1-py3-none-any.whl (14.4 kB view details)

Uploaded Python 3

File details

Details for the file ace_concurrency-0.1.1.tar.gz.

File metadata

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

File hashes

Hashes for ace_concurrency-0.1.1.tar.gz
Algorithm Hash digest
SHA256 e0ad36381f94f0bf31c4081807afa11ff5881e4c6654d906f00430d3e7f9665c
MD5 58370650c3bf18d29eac3e1870e82e5e
BLAKE2b-256 3eee4858a530e45e8e87f5bbdb8b38cfbbe931e4a8fc2c0acbf99705ce665386

See more details on using hashes here.

File details

Details for the file ace_concurrency-0.1.1-py3-none-any.whl.

File metadata

File hashes

Hashes for ace_concurrency-0.1.1-py3-none-any.whl
Algorithm Hash digest
SHA256 d3285a78fa6526e831d2a9f1e2bc94b718cdfadedaa82cd7fc3b33c55553d247
MD5 9a570562972a23b750e1805bf7cfa875
BLAKE2b-256 72bc42df9858ec6eb5a4a558c246d375eb2e024f6eae485f4afbe2fc01b303a0

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