Render Workflows – Durable task orchestration without queues or workers
Temporal alternative with function decorators instead of workflow DSLs.
Job queue for Python backed by Postgres. Process-per-task fork isolation, transactional enqueueing, periodic tasks, priority queues. No broker required.
Replaces Redis+RQ with just Postgres—fork isolation, transactional enqueueing, zero broker.
Backend developers, DevOps engineers using Python and Postgres
python-rq · Celery · APScheduler
pq is a simpler approach: It's a Postgres-backed background-task library for Python, using SELECT ... FOR UPDATE SKIP LOCKED for concurrency safety. You just run your N task workers, that's it. The stuff I think is worth knowing about: - Transactional enqueueing -- you can enqueue a task inside the same DB transaction as your writes. If the transaction rolls back, the task never exists. This is the thing Redis literally can't give you. Fork isolation -- every task runs in a forked child process. If it OOMs, segfaults, or leaks memory, the worker just keeps going. The parent monitors via os.wait4() and handles timeouts, OOM kills, and crashes cleanly. - Periodic tasks -- intervals or cron expressions, with overlap control (skip the tick if the previous run is still going), pause/resume without deleting the schedule. Priority queues -- five levels from BATCH to CRITICAL. You can dedicate workers to only process tasks with specific priorities. - Three tables in your main database schema: pq_tasks for one-off tasks, pq_periodic for periodic tasks and pq_alembic_version to track its own schema version (pq manages its own migrations).
There's also client IDs for idempotency and correlation with other tables in your application DB, upsert for debouncing (only the latest version of a task runs), lifecycle hooks that execute in the forked child (useful for fork-unsafe stuff like OpenTelemetry), and async task support.
What it won't do: high throughput (you're polling Postgres). If you need 10k+ tasks/sec or complex DAGs, use something else. For the kind of workload most apps actually have, it's probably sufficient.
pip install python-pq // uv add python-rq repo at https://github.com/ricwo/pq, docs at https://ricwo.github.io/pq
Temporal alternative with function decorators instead of workflow DSLs.
WAL-based push semantics eliminate polling—Redis queues without the Redis.
Ditches Redis entirely by leveraging Postgres LISTEN/NOTIFY for instant wakeups.
The dashboard exposes cron/interval scheduling, timezone support, retries, execution history, realtime metrics and API-key login, and it runs with a single docker-compose up — exactly the pragmatic feature set you'd want for hosting private webhooks. It isn't reinventing scheduling (Airflow, Rundeck and hosted cron services already exist), but it's a tidy, usable package for teams that want a lightweight, self-hosted alternative with a Python SDK.
TUI and web dashboard for ARQ when the library has no built-in monitoring.
SQLite for local dev without Redis, but Trigger.dev and Inngest already own this space.