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.1.tar.gz (18.4 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.1-py3-none-any.whl (21.9 kB view details)

Uploaded Python 3

File details

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

File metadata

  • Download URL: dflockd_client-2.1.1.tar.gz
  • Upload date:
  • Size: 18.4 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.1.tar.gz
Algorithm Hash digest
SHA256 7dd0f224d238725c51df8e92a3ac33f4512e4c57d28938859ab24a7162ac417d
MD5 d2875b37f5278ea4493d19e35244bc83
BLAKE2b-256 78a89b31914339c816f8e426b22a39f777189bef48681e76ce705bd19ca45b3a

See more details on using hashes here.

Provenance

The following attestation bundles were made for dflockd_client-2.1.1.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.1-py3-none-any.whl.

File metadata

  • Download URL: dflockd_client-2.1.1-py3-none-any.whl
  • Upload date:
  • Size: 21.9 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.1-py3-none-any.whl
Algorithm Hash digest
SHA256 34079bd532f6cc34f289809838358730e088246ce1853c50225bb11e72b67632
MD5 722784a65b499a18c1238177a07d2e8e
BLAKE2b-256 dc982ddccf2ded4d7daaddd49fd0fd0d7a3bbe1c3edcfb5c3d17549938ee15d1

See more details on using hashes here.

Provenance

The following attestation bundles were made for dflockd_client-2.1.1-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