Skip to main content

PostgreSQL-based distributed advisory lock (sync + async).

Project description

pg-dlock

PostgreSQL advisory-lock based distributed lock, sync + async.

from pg_dlock import Locker

with Locker("postgres://...") as locker:
    with locker.lock("my-key"):
        ...  # critical section

Async:

from pg_dlock import AsyncLocker

async with AsyncLocker("postgres://...") as locker:
    async with locker.lock("my-key"):
        ...

API

  • Locker(conninfo, *, pool_min_size=0, pool_max_size=10)
  • locker.lock(key, *, scope="session"|"transaction", shared=False) -> Lock
  • lock.acquire(blocking=True, timeout=-1) -> bool
    • blocking=True, timeout=-1: block forever
    • blocking=False: non-blocking
    • blocking=True, timeout>=0 (seconds): wait up to N seconds (uses statement_timeout)
  • lock.release()
  • Context manager support (with lock: / async with lock:).

Scopes

  • session: each lock opens its own dedicated connection (autocommit). Released via pg_advisory_unlock.
  • transaction: connection is checked out from an internal pool and a transaction is begun; lock is released by the commit/rollback on exit.

Keys

  • str / bytes: hashed with xxhash.xxh3_64 into a signed int64.
  • int: used directly (must fit in signed int64).
  • tuple[int, int]: each element must fit in signed int32; packed into a single int64.

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

pg_dlock-0.0.0a2.tar.gz (9.0 kB view details)

Uploaded Source

Built Distribution

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

pg_dlock-0.0.0a2-py3-none-any.whl (9.0 kB view details)

Uploaded Python 3

File details

Details for the file pg_dlock-0.0.0a2.tar.gz.

File metadata

  • Download URL: pg_dlock-0.0.0a2.tar.gz
  • Upload date:
  • Size: 9.0 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: uv/0.11.7 {"installer":{"name":"uv","version":"0.11.7","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"Ubuntu","version":"24.04","id":"noble","libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":true}

File hashes

Hashes for pg_dlock-0.0.0a2.tar.gz
Algorithm Hash digest
SHA256 75094aec84c31cfb45cc6fcb575aba4a212ce04704735dc293917000c3075ce4
MD5 b88022c8112b668d58fd78ab4b8cab74
BLAKE2b-256 1bdc095483e39525edfef6d25a32f1f7e732278db948db64dadbf45bc7ff8294

See more details on using hashes here.

File details

Details for the file pg_dlock-0.0.0a2-py3-none-any.whl.

File metadata

  • Download URL: pg_dlock-0.0.0a2-py3-none-any.whl
  • Upload date:
  • Size: 9.0 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: uv/0.11.7 {"installer":{"name":"uv","version":"0.11.7","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"Ubuntu","version":"24.04","id":"noble","libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":true}

File hashes

Hashes for pg_dlock-0.0.0a2-py3-none-any.whl
Algorithm Hash digest
SHA256 aa5e444e6bf9246fc6e1f2b709ff16bd44bc73d1443fca9fc4a92a0de722e19c
MD5 4942396c207bb8a341b8c63d67fee1ac
BLAKE2b-256 b8bdcda43565bcbece0494c2a3c3bd094aa88dead987d51b0449c1885734f85d

See more details on using hashes here.

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