Skip to main content

Postgres-based distributed task processing library

Project description

Procrastinate: PostgreSQL-based Task Queue for Python

Deployed to PyPI Deployed to PyPI GitHub Repository Continuous Integration Documentation Coverage badge MIT License Contributor Covenant Discord

Procrastinate is looking for additional maintainers!

Procrastinate is an open-source Python 3.8+ distributed task processing library, leveraging PostgreSQL to store task definitions, manage locks and dispatch tasks. It can be used within both sync and async code, has Django integration, and is easy to use with ASGI frameworks. It supports periodic tasks, retries, arbitrary task locks etc.

In other words, from your main code, you call specific functions (tasks) in a special way and instead of being run on the spot, they're scheduled to be run elsewhere, now or in the future.

Here's an example (if you want to run the code yourself, head to Quickstart):

# mycode.py
import procrastinate

# Make an app in your code
app = procrastinate.App(connector=procrastinate.SyncPsycopgConnector())

# Then define tasks
@app.task(queue="sums")
def sum(a, b):
    with open("myfile", "w") as f:
        f.write(str(a + b))

with app.open():
    # Launch a job
    sum.defer(a=3, b=5)

# Somewhere in your program, run a worker (actually, it's usually a
# different program than the one deferring jobs for execution)
app.run_worker(queues=["sums"])

The worker will run the job, which will create a text file named myfile with the result of the sum 3 + 5 (that's 8).

Similarly, from the command line:

export PROCRASTINATE_APP="mycode.app"

# Launch a job
procrastinate defer mycode.sum '{"a": 3, "b": 5}'

# Run a worker
procrastinate worker -q sums

Lastly, you can use Procrastinate asynchronously too (actually, it's the recommended way to use it):

import asyncio

import procrastinate

# Make an app in your code
app = procrastinate.App(connector=procrastinate.PsycopgConnector())

# Define tasks using coroutine functions
@app.task(queue="sums")
async def sum(a, b):
    await asyncio.sleep(a + b)

async with app.open_async():
    # Launch a job
    await sum.defer_async(a=3, b=5)

    # Somewhere in your program, run a worker (actually, it's often a
    # different program than the one deferring jobs for execution)
    await app.run_worker_async(queues=["sums"])

There are quite a few interesting features that Procrastinate adds to the mix. You can head to the Quickstart section for a general tour or to the How-To sections for specific features. The Discussion section should hopefully answer your questions. Otherwise, feel free to open an issue.

Note to my future self: add a quick note here on why this project is named "Procrastinate" ;) .

Where to go from here

The complete docs is probably the best place to learn about the project.

If you encounter a bug, or want to get in touch, you're always welcome to open a ticket.

Project details


Release history Release notifications | RSS feed

Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

procrastinate-2.9.1.tar.gz (74.9 kB view details)

Uploaded Source

Built Distribution

procrastinate-2.9.1-py3-none-any.whl (120.3 kB view details)

Uploaded Python 3

File details

Details for the file procrastinate-2.9.1.tar.gz.

File metadata

  • Download URL: procrastinate-2.9.1.tar.gz
  • Upload date:
  • Size: 74.9 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/5.1.0 CPython/3.12.4

File hashes

Hashes for procrastinate-2.9.1.tar.gz
Algorithm Hash digest
SHA256 6c3566f15d42ce9ea52c0d9e2b92151970d78b9bb797b82d03cbdd2d2d347586
MD5 bb6ca0e266cd35be5b4bb1896cae9a12
BLAKE2b-256 a98e9841705c85612d5e1d842d4c9013c819d2d956b09a62a9e82368664c1628

See more details on using hashes here.

File details

Details for the file procrastinate-2.9.1-py3-none-any.whl.

File metadata

File hashes

Hashes for procrastinate-2.9.1-py3-none-any.whl
Algorithm Hash digest
SHA256 e1db7843268a8a6bb18055b316df871dc729e93342cb69c015cf8181ab00002d
MD5 bf08149b034d8ad68a2bc0f6f2f7543a
BLAKE2b-256 7a89b236f482f8dad878a67b879573bbee4e0b9893d64ad4634d1411cd2141b2

See more details on using hashes here.

Supported by

AWS AWS Cloud computing and Security Sponsor Datadog Datadog Monitoring Fastly Fastly CDN Google Google Download Analytics Microsoft Microsoft PSF Sponsor Pingdom Pingdom Monitoring Sentry Sentry Error logging StatusPage StatusPage Status page