প্রকল্প সম্পর্কে

toro হলো Redis দ্বারা সমর্থিত Python-এর জন্য একটি async-first job queue। এটি PyPI থেকে `toro-queue` হিসেবে ইনস্টল করা হয় (import name হলো `toro`) এবং FastAPI বা aiohttp-এর মতো asyncio অ্যাপ্লিকেশনের জন্য ডিজাইন করা হয়েছে। README-তে বর্ণিত মূল ডিজাইন পয়েন্টগুলো: - Async-native API: thread pool বা sync bridge ছাড়াই async/await দিয়ে job enqueue ও process করা যায়। - Atomic state transition: claim, retry, promotion এবং finish Lua script হিসেবে বাস্তবায়িত, তাই round trip-এর মাঝে কোনো job হারিয়ে যেতে পারে না বা double-commit হতে পারে না। - At-least-once delivery: per-job lock এবং background mark-and-sweep crashed worker থেকে job recover করে। - Typed: py.typed সহ আসে এবং public API সম্পূর্ণ annotated। ফিচার সেট: - Delayed job এবং global priority enqueue করা যায় (একটি priority band-এর ভেতরে FIFO)। - Fixed বা exponential backoff এবং capped attempts সহ retry। - Cron expression বা fixed interval (`every`) ব্যবহার করে repeatable schedule। - Flow: fan-out/fan-in সহ parent/child job tree, per-child failure policy এবং flow-aware retry। - সব worker-এর মধ্যে শেয়ার করা queue-wide token-bucket rate limiting। - Worker process জুড়ে একসাথে active job-এর global concurrency cap। - Custom idempotent job id এবং throttle window-এর মাধ্যমে deduplication। - `concurrency_key` দিয়ে একই key শেয়ার করা job-গুলোকে ক্রমানুসারে serialize করা, worker ধরে না রেখেই। - `cancel_job()`-এর মাধ্যমে cancellation, যার মধ্যে await point-এ running processor বাতিল করাও অন্তর্ভুক্ত। - Configurable retention সহ bounded history (ডিফল্ট: সর্বশেষ 1000 completed, 5000 failed)। - Reliability ফিচার: per-job lock, lock renewal, stalled-job recovery। - Observability: progress, per-job log, lifecycle event, এবং producer side থেকে `await result()`। - Metrics: `metrics_text()` OpenMetrics প্রকাশ করে, যা restart-এর পরেও টিকে থাকা counter দ্বারা সমর্থিত। - Lifecycle control: pause/resume এবং in-flight job drain করা graceful shutdown। - একটি companion live web dashboard, matador, আলাদা project হিসেবে পাওয়া যায়। README-তে একটি quick-start উদাহরণ রয়েছে যেখানে `Queue` তৈরি, একটি job যোগ, একটি async processor সংজ্ঞায়িত, এবং concurrency setting ও completed-event callback সহ একটি `Worker` চালানো দেখানো হয়েছে। অতিরিক্ত উদাহরণে priority, delay, exponential backoff সহ retry, idempotent custom job id, cron schedule, `FlowChild` সহ flow, queue-wide rate limit, এবং একটি job result-এর জন্য অপেক্ষা দেখানো হয়েছে। Development-এ uv এবং Astral toolchain ব্যবহৃত হয়: `uv sync`, linting ও formatting-এর জন্য ruff, type checking-এর জন্য `ty`, এবং unit, integration (port 6379-এ Redis প্রয়োজন) ও load test marker সহ pytest। Projectটি MIT licensed।