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.14.tar.gz (9.4 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.14-py3-none-any.whl (12.2 kB view details)

Uploaded Python 3

File details

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

File metadata

  • Download URL: tarsq-0.1.14.tar.gz
  • Upload date:
  • Size: 9.4 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.14.tar.gz
Algorithm Hash digest
SHA256 527a33caa5834682022b26aa85f0e0121cd7b5b5ce0c2b462f3001e8d2b01699
MD5 ef02d4f0d6efc40a178dc71ef1d6e548
BLAKE2b-256 cb2ba21752bee441d15a8b5fd5a2cd7621d94592226b4ef711e4707f0977a300

See more details on using hashes here.

File details

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

File metadata

  • Download URL: tarsq-0.1.14-py3-none-any.whl
  • Upload date:
  • Size: 12.2 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.14-py3-none-any.whl
Algorithm Hash digest
SHA256 bd36f23e765d47f149f45f39bc4cace6564aea93cff0f94c30217adaefbb16ac
MD5 fc929e02b6671ca59f11ca316f8f713d
BLAKE2b-256 4150d07c9de86408673fdea548fc795fb7d0bd6c96061bc76b2768ef300de794

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