Skip to main content

Pie-lock

All lock module using redis for control.

Package version Supported Python versions

Installation

With Pypi:

pip install pie-lock

With Github:

pip install git+https://github.com/bacsiTuan/pielock.git

Usage Distributed Lock

key = "test1"
success, msg = redis_lock.acquire(key)
print(msg)
if not success:
    print(msg)
redis_lock.release(key)

Usage Optimistic Lock

def test_optimistic_lock(self):
    is_locked1, msg = redis_lock.acquire("key1")
    if not is_locked1:
        print(msg)
    is_locked2, msg = redis_lock.acquire("key1")
    if not is_locked2:
        print(msg)
    is_locked3, msg = redis_lock.acquire("key1")
    if not is_locked3:
        print(msg)
    release, msg = redis_lock.release("key1")
    if not release:
        print(msg)
    is_locked4, msg = redis_lock.acquire("key1")
    if not is_locked4:
        print(msg)

Configuration

Redis configuration

from pie_lock.backends import DistributedLock

redis_lock = DistributedLock(
    expires=5,
    timeout=5,
    retry_after=1, # seconds between retries
    tries=32,  # max number of tries
)
redis_lock.get_client(
    host="localhost",
    port=19821,
    password="passsword",
    username="default"
)

Note: all fields after the scheme are optional, and will default to localhost on port 6379, using database 0.

DEFAULT_TIMEOUT (default: 60)

If another client has already obtained the lock, sleep for a maximum of this many seconds before giving up. A value of 0 means no wait (give up right away).

The default timeout can be overridden when instantiating the lock.

Limiter

Based on sliding window algorithm

from pie_lock.backends import Limiter, TimeUnit

redis = Limiter(
    host="localhost",
    port=19821,
    password="passsword",
    username="default",
    socket_timeout=2,
)

for i in range(6):
    allow, msg = redis.allow(redis_key="mylist", per=TimeUnit.SECOND, count=2)
    if not allow:
        print(msg)
time.sleep(1)
allow, msg = redis.allow(redis_key="mylist", per=TimeUnit.SECOND, count=2)
if not allow:
    print(msg)

We consider any existing lock older than this many seconds to be invalid
in order to detect crashed clients. This value must be higher than it
takes the critical section to execute.

The default expires can be overridden when instantiating the lock.

Metadata

Release files for pie-lock 0.1.7

For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.

Source distribution (sdist)

Source distribution for pie-lock 0.1.7
File Size Uploaded
pie_lock-0.1.7.tar.gz 10.5 kB Details

Built distribution (wheel)

Table of built distributions (wheels) for pie-lock 0.1.7
File Interpreter ABI Platform
pie_lock-0.1.7-py3-none-any.whl Python 3 none any Details

Total release size: 22.8 kB

Release files / pie_lock-0.1.7.tar.gz

Download URL pie_lock-0.1.7.tar.gz
Size 10.5 kB
Tags Source
SHA-256 checksum
How to use checksums
cb4b13570d7bb6b2d9cb61b930ec9c6040f6e68d85a3c5edf25f86795b50d582
BLAKE2b-256 checksum
How to use checksums
4e28ab26c1a552ac68f65564087e2bb758e29bfc70a7903612bb7b94c9ec07ae
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via poetry/1.3.1 CPython/3.9.13 Darwin/22.1.0

Release files / pie_lock-0.1.7-py3-none-any.whl

Download URL pie_lock-0.1.7-py3-none-any.whl
Size 12.4 kB
Tags Python 3
SHA-256 checksum
How to use checksums
91207bfb4695563b9710d54cf681b34248e6574587d36660fce92a070cf44b9d
BLAKE2b-256 checksum
How to use checksums
8f0a2a4ef1517bbd2cc1fcdcff30c3db91a4d9c7258aca87f6a67343b6fd7266
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via poetry/1.3.1 CPython/3.9.13 Darwin/22.1.0

Release history Release notifications | RSS feed

This release

0.1.7 This release

2 release files

0.1.6

2 release files

Anthropic, PBC Visionary sponsor Bloomberg Visionary sponsor Hudson River Trading Visionary sponsor Meta Visionary sponsor NVIDIA Visionary sponsor Microsoft Sustainability sponsor Depot Continuous Integration AWS Cloud computing and Security Sponsor Datadog Monitoring Fastly CDN Google Download Analytics Sentry Error logging StatusPage Status page