taskferry-procrastinate
Run Taskferry tasks on Procrastinate — a durable, PostgreSQL-backed task engine.
flowchart LR
APP["Application"]
TP["Taskferry"]
AD["taskferry-procrastinate"]
PRO["Procrastinate"]
PG["PostgreSQL"]
APP --> TP --> AD --> PRO --> PG
Taskferry does not implement a queue, a worker, job reservation or retries. Procrastinate already does all of that, correctly, on PostgreSQL. This package is the translation layer between the two — and nothing else.
Install
pip install 'taskferry-procrastinate[procrastinate]'
PostgreSQL becomes a dependency of your deployment only once you select this
backend. taskferry itself has no dependencies at all.
Submitting
from taskferry import Taskferry
runtime = Taskferry.from_mapping(
{
"backends": {"pg": {"factory": "procrastinate", "app": "myapp.tasks:app"}},
"defaults": {"task": "pg"},
}
)
runtime.tasks.submit("myapp.tasks:refresh_metadata", 42, queue="metadata")
Executing
Register the dispatcher once, then run Procrastinate's own worker:
# myapp/tasks.py
from procrastinate import App, PsycopgConnector
from taskferry import FunctionRegistry
from taskferry_procrastinate import register_dispatcher
app = App(connector=PsycopgConnector(conninfo="postgresql://..."))
# An allowlist matters: task names arrive from the queue.
register_dispatcher(app, registry=FunctionRegistry(allowed_modules=["myapp"]))
procrastinate --app=myapp.tasks.app worker
Capabilities
| Capability | Supported | How |
|---|---|---|
SUBMIT |
yes | defer() |
STATE |
yes | job manager |
CANCEL |
yes | cancel_job_by_id |
DELAY |
yes | schedule_at |
PRIORITY |
yes | native job priority |
RETRY |
yes | engine-owned, via the retry signal |
DEDUPLICATION |
yes | queueing_lock |
RESULT |
no | Procrastinate stores no return values |
RESULT is absent because Procrastinate genuinely does not keep results.
Taskferry raises UnsupportedCapability rather than inventing a results table —
building queue features is precisely what this project exists not to do.
Backend options
TaskSpec(
task="myapp.tasks:reindex",
backend_options=BackendOptions(
{
"procrastinate": {
"lock": "reindex-42", # serialise jobs against a key
"queueing_lock": "reindex", # refuse a duplicate while one is pending
}
}
),
)
License
Apache-2.0.
Release files for taskferry-procrastinate 0.3.0
For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.
Source distribution (sdist)
| File | Size | Uploaded | |
|---|---|---|---|
| taskferry_procrastinate-0.3.0.tar.gz | 14.4 kB | Details |
Built distribution (wheel)
| File | Interpreter | ABI | Platform | Reset |
|---|---|---|---|---|
| taskferry_procrastinate-0.3.0-py3-none-any.whl | Python 3 | none | any | Details |
Total release size: 31.1 kB
Release files / taskferry_procrastinate-0.3.0.tar.gz
| Download URL | taskferry_procrastinate-0.3.0.tar.gz |
|---|---|
| Size | 14.4 kB |
| Tags | Source |
|
SHA-256 checksum How to use checksums |
93edeffbc07f7fe6245a1651b1514039d7e22c85674701351694472f3d830de9
|
|
BLAKE2b-256 checksum How to use checksums |
6f7d71c30d0f5c420d2b6d9da16c4df8bead83babce58fd4b5aa8e6c691fcdcd
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
twine/7.0.0 CPython/3.13.14
|
Provenance
Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.
PyPI Publish Attestation
PyPI verified that this artifact, at this checksum, originated from the publisher listed below.
Signed by GitHub Actions, verified by PyPI on Sep 19, 2026.
Transparency logRelease files / taskferry_procrastinate-0.3.0-py3-none-any.whl
| Download URL | taskferry_procrastinate-0.3.0-py3-none-any.whl |
|---|---|
| Size | 16.7 kB |
| Tags | Python 3 |
|
SHA-256 checksum How to use checksums |
5112274fcebfabd46850b84cf82936570e34ee9867c5cc0bdc6e3d98cb8ade81
|
|
BLAKE2b-256 checksum How to use checksums |
9933e1e2ca8e734ad7fbb2470857fcbcc4f0821dfb86fa0021369da0a7e810cc
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
twine/7.0.0 CPython/3.13.14
|
Provenance
Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.
PyPI Publish Attestation
PyPI verified that this artifact, at this checksum, originated from the publisher listed below.
Signed by GitHub Actions, verified by PyPI on Sep 19, 2026.
Transparency log