Skip to main content

A distributed background task system for Python functions

Project description

Docket is a distributed background task system for Python functions with a focus on the scheduling of future work as seamlessly and efficiently as immediate work.

PyPI - Version PyPI - Python Version GitHub main checks Codecov PyPI - License Documentation

At a glance

from datetime import datetime, timedelta, timezone

from docket import Docket


async def greet(name: str, greeting="Hello") -> None:
    print(f"{greeting}, {name} at {datetime.now()}!")


async with Docket() as docket:
    await docket.add(greet)("Jane")

    now = datetime.now(timezone.utc)
    soon = now + timedelta(seconds=3)
    await docket.add(greet, when=soon)("John", greeting="Howdy")
from docket import Docket, Worker

async with Docket() as docket:
    async with Worker(docket) as worker:
        worker.register(greet)
        await worker.run_until_finished()
Hello, Jane at 2025-03-05 13:58:21.552644!
Howdy, John at 2025-03-05 13:58:24.550773!

Check out our docs for more details, examples, and the API reference.

Why docket?

⚡️ Snappy one-way background task processing without any bloat

📅 Schedule immediate or future work seamlessly with the same interface

⏭️ Skip problematic tasks or parameters without redeploying

🌊 Purpose-built for Redis streams

🧩 Fully type-complete and type-aware for your background task functions

💉 Dependency injection like FastAPI, Typer, and FastMCP for reusable resources

Installing docket

Docket is available on PyPI under the package name pydocket. It targets Python 3.10 or above.

With uv:

uv pip install pydocket

or

uv add pydocket

With pip:

pip install pydocket

Docket requires a Redis server with Streams support (which was introduced in Redis 5.0.0). Docket is tested with:

  • Redis 6.2, 7.4, and 8.6 (standalone and cluster modes)
  • Valkey 8.1
  • In-memory backend via fakeredis for testing

For testing without Redis, use the in-memory backend:

from docket import Docket

async with Docket(name="my-docket", url="memory://my-docket") as docket:
    # Use docket normally - all operations are in-memory
    ...

See Testing with Docket for more details.

Hacking on docket

We use uv for project management, so getting set up should be as simple as cloning the repo and running:

uv sync

The to run the test suite:

pytest

We aim to maintain 100% test coverage, which is required for all PRs to docket. We believe that docket should stay small, simple, understandable, and reliable, and that begins with testing all the dusty branches and corners. This will give us the confidence to upgrade dependencies quickly and to adapt to new versions of Redis over time.

To work on the documentation locally:

uv sync
uv run zensical serve

This will start a local preview server. The docs are built with Zensical and configured in mkdocs.yml.

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

pydocket-0.19.1.tar.gz (363.3 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

pydocket-0.19.1-py3-none-any.whl (101.0 kB view details)

Uploaded Python 3

File details

Details for the file pydocket-0.19.1.tar.gz.

File metadata

  • Download URL: pydocket-0.19.1.tar.gz
  • Upload date:
  • Size: 363.3 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/6.1.0 CPython/3.13.12

File hashes

Hashes for pydocket-0.19.1.tar.gz
Algorithm Hash digest
SHA256 83135a2c171f6600c6ab6d4e0739bf76496b87383ab9a2172e3bdfcd52bc8b05
MD5 025d679b6ccbf2b4fc893a8733dc11e4
BLAKE2b-256 dd6ecdfef4cf65c568deea932fc0c9b521b0287c62cb36a25f66739da5f7528d

See more details on using hashes here.

Provenance

The following attestation bundles were made for pydocket-0.19.1.tar.gz:

Publisher: publish.yml on chrisguidry/docket

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file pydocket-0.19.1-py3-none-any.whl.

File metadata

  • Download URL: pydocket-0.19.1-py3-none-any.whl
  • Upload date:
  • Size: 101.0 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/6.1.0 CPython/3.13.12

File hashes

Hashes for pydocket-0.19.1-py3-none-any.whl
Algorithm Hash digest
SHA256 ec17f73452856482959ab90265ac8630347f2cbd21f0edb782016ae57faad1d1
MD5 60e8ed0ff8e71d5a98b50ade81368be2
BLAKE2b-256 7ae1488d5e35b69e1d0c222dea76f3ed63f7237aff8b995d1d7a2d869b929bd0

See more details on using hashes here.

Provenance

The following attestation bundles were made for pydocket-0.19.1-py3-none-any.whl:

Publisher: publish.yml on chrisguidry/docket

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

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