Skip to main content

A fast, production-ready task queue for Python

Project description

tarsq

A fast, production-ready task queue for Python backed by Redis.

Features

  • Simple @task decorator to register handlers (sync and async)
  • dispatch() to enqueue jobs from anywhere in your app
  • status() to track job progress
  • Automatic retries (up to 3) with exponential backoff
  • Configurable worker count and task timeout
  • Startup/shutdown lifecycle hooks
  • Crashed worker auto-restart
  • Stuck task recovery on startup

Requirements

  • Python 3.11+
  • Redis

Installation

pip install tarsq

Quick start

1. Define your tasks (myapp/tasks.py):

from tarsq import task

@task("send_email")
def send_email(ctx, payload):
    print(f"Sending email to {payload['to']}")

@task("resize_image")
async def resize_image(ctx, payload):
    print(f"Resizing image at {payload['url']}")

2. Configure the worker (myapp/worker_settings.py):

from tarsq import WorkerSettings

class MyWorkerSettings(WorkerSettings):
    app = "myapp.tasks"
    workers = 5
    timeout = 60

3. Start the worker:

tarsq --settings myapp.worker_settings.MyWorkerSettings

Or without a settings class:

tarsq --app myapp.tasks --workers 5 --timeout 60

4. Dispatch jobs from your application:

from tarsq import dispatch, status

job_id = dispatch("send_email", payload={"to": "user@example.com"})

job = status(job_id)
print(job.status)  # queued | in_progress | completed | failed

Configuration

WorkerSettings

Attribute Type Default Description
app str None Dotted module path containing your @task handlers
workers int 5 Number of concurrent worker threads
timeout int 300 Max seconds a task can run before being killed
ctx dict {} Shared context passed to every task handler
on_startup callable None Called once before workers start (sync or async)
on_shutdown callable None Called once after workers stop (sync or async)

Environment variables

Variable Default Description
REDIS_HOST localhost Redis host
REDIS_PORT 6379 Redis port
REDIS_PASSWORD None Redis password

Variables can also be set in a .env file in your project root.

Lifecycle hooks

from tarsq import WorkerSettings

async def on_startup(ctx):
    ctx["db"] = await create_db_pool()

async def on_shutdown(ctx):
    await ctx["db"].close()

class MyWorkerSettings(WorkerSettings):
    app = "myapp.tasks"
    on_startup = on_startup
    on_shutdown = on_shutdown

The ctx dict is passed into every task handler, making it easy to share connections across tasks.

Job status

from tarsq import status, TaskStatusEnum

job = status(job_id)

job.job_id      # UUID string
job.task        # task name
job.status      # TaskStatusEnum: queued | in_progress | completed | failed
job.retries     # number of retry attempts so far
job.created_at  # ISO 8601 timestamp
job.updated_at  # ISO 8601 timestamp of last status change

License

MIT

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

tarsq-0.1.15.tar.gz (10.3 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

tarsq-0.1.15-py3-none-any.whl (13.1 kB view details)

Uploaded Python 3

File details

Details for the file tarsq-0.1.15.tar.gz.

File metadata

  • Download URL: tarsq-0.1.15.tar.gz
  • Upload date:
  • Size: 10.3 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: poetry/2.3.4 CPython/3.12.13 Darwin/25.0.0

File hashes

Hashes for tarsq-0.1.15.tar.gz
Algorithm Hash digest
SHA256 28b5c8d32c8f8ca325853e6a50ca109c3ca384a559ed9d63b86fed3c4eedfeb2
MD5 46d7fbe7c79bcd2fe2ffcb26e2a53b9a
BLAKE2b-256 e66756ccc39b37471052e2f5ff7990ad919184a30b1b30e531e4c29ae61b1308

See more details on using hashes here.

File details

Details for the file tarsq-0.1.15-py3-none-any.whl.

File metadata

  • Download URL: tarsq-0.1.15-py3-none-any.whl
  • Upload date:
  • Size: 13.1 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? No
  • Uploaded via: poetry/2.3.4 CPython/3.12.13 Darwin/25.0.0

File hashes

Hashes for tarsq-0.1.15-py3-none-any.whl
Algorithm Hash digest
SHA256 2aa88648c406e9f14953eee079d2b99f36a475e68b91cd32e3ecabf9764155da
MD5 8e1b34e5d72a2b4a5f4db3c0053a0b42
BLAKE2b-256 5b204422daf8f6269ea273baf1dfdb5a6b1e870439fa954973e3778fcddba6e2

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