Workers survive their own failures.
Crash → restart with backoff. --workers 8 fills your cores. Graceful shutdown on SIGTERM drains in-flight jobs — nothing dropped.
Three primitives: @task, dispatch(), and a worker process. Retries, timeouts, crash recovery — without the framework.
Crash → restart with backoff. --workers 8 fills your cores. Graceful shutdown on SIGTERM drains in-flight jobs — nothing dropped.
Failures retry with exponential backoff — 2s, 4s, 8s. Three attempts before a job is marked failed. The worker moves on either way.
Initialize your connection pool once at worker startup. Every task receives it via ctx — no reconnection, no globals.
--timeout 30 means 30 seconds — hard limit, not a hint. Task cancelled, marked failed, worker keeps running.
No client SDK to manage. No broker config to memorize. Define tasks where they live, dispatch them anywhere they're needed.
One decorator, one name string. That's how tarsq knows what to run when a job arrives.
Works from any Python process — web handler, CLI script, cron job, or another task. No shared instance required.
tarsq worker dequeues jobs, runs them with your retry and timeout config, and logs every state change.
MIT licensed. pip install is the entire setup.