Skip to main content

dflockd python client

Project description

dflockd-client

A Python client for dflockd — a distributed FIFO lock and counting-semaphore server.

Documentation · Changelog

Features

  • Sync and async clients — pick the one that matches your runtime
  • Distributed locks and counting semaphores with FIFO ordering
  • Single-phase acquire and two-phase enqueue + wait
  • Background lease renewal — call acquire, hold for as long as you need
  • Grant tokens carry a monotonic fence prefix — usable as fencing tokens
  • Multi-server sharding (deterministic CRC-32; matches the Go and TypeScript clients)
  • TLS and shared-secret authentication
  • Zero runtime dependencies; Python 3.12+

Install

pip install dflockd-client
# or
uv add dflockd-client

Quick start

A running dflockd server on 127.0.0.1:6388 is the only prerequisite.

Lock

from dflockd_client import SyncDistributedLock

with SyncDistributedLock("my-key") as lock:
    # critical section — lease auto-renews in a daemon thread
    print(f"acquired: {lock.token}")
import asyncio
from dflockd_client import AsyncDistributedLock

async def main():
    async with AsyncDistributedLock("my-key") as lock:
        print(f"acquired: {lock.token}")

asyncio.run(main())

Semaphore

Up to limit concurrent holders on the same key:

from dflockd_client import SyncDistributedSemaphore

with SyncDistributedSemaphore("pool", limit=3) as sem:
    print(f"slot: {sem.token}")

Authentication and TLS

import ssl
from dflockd_client import SyncDistributedLock

with SyncDistributedLock(
    "my-key",
    auth_token="shared-secret",
    ssl_context=ssl.create_default_context(),
) as lock:
    ...

Multi-server sharding

from dflockd_client import SyncDistributedLock

with SyncDistributedLock(
    "my-key",
    servers=[("a", 6388), ("b", 6388), ("c", 6388)],
) as lock:
    # the same key always routes to the same server
    ...

Fencing tokens

Every grant returns a 32-char hex token whose first 16 hex chars are a monotonic uint64 (big-endian) that strictly increases on every grant from a server. fence_from_token parses it, so the token doubles as a fencing token: a downstream resource stores the highest fence it has seen for a key and rejects any write whose fence compares less.

from dflockd_client import SyncDistributedLock, fence_from_token

with SyncDistributedLock("row:42") as lock:
    fence = fence_from_token(lock.token)  # int — pass to your DB / blob store

See the docs for two-phase acquisition, exception handling, low-level transport, and more.

Project details


Download files

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

Source Distribution

dflockd_client-2.1.0.tar.gz (17.2 kB view details)

Uploaded Source

Built Distribution

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

dflockd_client-2.1.0-py3-none-any.whl (20.3 kB view details)

Uploaded Python 3

File details

Details for the file dflockd_client-2.1.0.tar.gz.

File metadata

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

File hashes

Hashes for dflockd_client-2.1.0.tar.gz
Algorithm Hash digest
SHA256 5a43d73183de022ec9ec5c8d6629946728018a6716c6a862286b4e0772fc16aa
MD5 f8bea43d8e23ad6c2cb9314cb74f8d5b
BLAKE2b-256 e6022ec648b3b458438ebef8f1c46474ed7b48a192340f04fcf6a4890e25219c

See more details on using hashes here.

Provenance

The following attestation bundles were made for dflockd_client-2.1.0.tar.gz:

Publisher: publish.yml on mtingers/dflockd-client-py

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

File details

Details for the file dflockd_client-2.1.0-py3-none-any.whl.

File metadata

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

File hashes

Hashes for dflockd_client-2.1.0-py3-none-any.whl
Algorithm Hash digest
SHA256 34bd37cad360f3e2c7e75055c67b78b056112a417b789054ee94c39373e88567
MD5 7b307722efd81d7ee48892ac6851c5dd
BLAKE2b-256 d028cac27893ad12bf9892d851ed191712bbfce468e52e33808e7eccb277e29a

See more details on using hashes here.

Provenance

The following attestation bundles were made for dflockd_client-2.1.0-py3-none-any.whl:

Publisher: publish.yml on mtingers/dflockd-client-py

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