← All systems
Job frameworkAdapter in this repo

Procrastinate

Python sync/async tasks with application locks and configurable recovery.

API / SDK surfacePython
Inspected snapshot3.10.0 · source snapshot
Sources checked2026-10-23
License at snapshotMIT

View pinned source / version e049c4d74cde · Features reviewed against pinned default-branch source; release label is separately verified, not assumed to be the benchmark adapter version.

What this system is built around

Sync and async Python tasks with PostgreSQL scheduling, application locks and optional Django integration.

A useful starting point

A Python-focused option when sync/async code or Django integration is useful. Useful when application-level serialization keys are needed, with recovery tasks and retry policies configured deliberately.

Editorial fit, based on the cited design. Verify against your workload.

Semantics & operating model

Concise claims with their scope intact. “Not verified” means this review did not establish the answer.

Claiming & concurrency

Documented

Worker concurrency is configurable. lock strings serialize jobs sharing a key; priority then creation time determine order among waiting jobs. Claims use FOR UPDATE SKIP LOCKED.

Transactional enqueue

Documented

configure(connection=...) defers on an application-owned transaction with supported psycopg or SQLAlchemy connectors; caller commits. This is current default-branch behavior, not an assertion about older adapter pins.

Crash recovery & retries

Qualified

Heartbeats identify stalled workers, but crashed jobs may remain doing forever unless an operator or configured periodic task retries them.

Delayed & recurring work

Documented

schedule_at / schedule_in defer jobs; App.periodic implements cron with distributed once-per-period enqueue. A worker must be running for periodic enqueue.

Uniqueness / deduplication

Documented

queueing_lock rejects another pending todo job via AlreadyEnqueued; it permits multiple doing jobs. Combine with an execution lock if serialized execution is also needed.

Postgres extension required

Not required

The installed schema consists of SQL tables/functions; docs specify Python 3.10+ and PostgreSQL 13+, with no extra queue service.

Operator interface

Documented

Procrastinate exposes job/event/periodic models in Django admin; models are read-only by default. This is an optional Django integration, not a standalone bundled dashboard.

Tradeoffs to carry into a test