Secure and efficient distributed locks (Radisson like) implemetation
Project description
aioredlock-py
Secure and efficient distributed locks (Redisson like) implemetation. Ensure efficient performance with biased locking's implementation, can load more than 1k/s of concurrent requests with default parameter settings.
Requirements
- aioredis>=2.0.0
Install
pip install aioredlock-py
Feature
- Ensure reliability with context manager.
- Use lua scripts to ensure atomicity on lock release.
- Notification prompt you to cancel the following execution if acquisition fails
- Reliable in high concurrency.
Documentation
https://aioredlock-py.readthedocs.io
Basic usage
import asyncio
import aioredis
from aioredlock_py import Redisson
async def single_thread(redis):
for _ in range(10):
async with Redisson(redis, key="no1") as lock:
if not lock:
# If the lock still fails after several attempts, `__aenter__`
# will return None to prompt you to cancel the following execution
return 'Do something, failed to acquire lock' # raise ...
# else
# Service logic protected by Redisson
await redis.incr("foo")
async def test_long_term_occupancy(redis):
async with Redisson(redis, key="no1", ex=10) as lock:
if not lock: return;
# Service logic protected by Redisson
await redis.set("foo", 0)
# By default, a lock is automatically released if no action is
# taken for 20 seconds after redisson holds it. Let's assume that
# your service logic takes a long time (30s in this case) to process,
# you don't need to worry about it causing chaos, because there's
# background threads help you automatically renew legally held locks.
await asyncio.sleep(30)
await redis.incr("foo")
async def main():
redis = aioredis.from_url("redis://localhost")
await redis.delete("redisson:no1")
await redis.set("foo", 0)
await asyncio.gather(*(single_thread(redis) for _ in range(20)))
assert int(await redis.get("foo")) == 200
# test_long_term_occupancy(redis)
asyncio.run(main())
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
aioredlock_py-0.1.5.tar.gz
(6.0 kB
view details)
Built Distribution
File details
Details for the file aioredlock_py-0.1.5.tar.gz
.
File metadata
- Download URL: aioredlock_py-0.1.5.tar.gz
- Upload date:
- Size: 6.0 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/4.0.0 CPython/3.8.12
File hashes
Algorithm | Hash digest | |
---|---|---|
SHA256 | fd56ef89fd9d6b82916ceb9404cd2bd050610e37fe3cc59611a5582982f01028 |
|
MD5 | e9b2cf4cb434b05cb89e116acd9259a9 |
|
BLAKE2b-256 | 6f13547bbf3253de66806ec2f5309294dfcb43753b5bd9b686151757e6e68f7a |
File details
Details for the file aioredlock_py-0.1.5-py3-none-any.whl
.
File metadata
- Download URL: aioredlock_py-0.1.5-py3-none-any.whl
- Upload date:
- Size: 6.5 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/4.0.0 CPython/3.8.12
File hashes
Algorithm | Hash digest | |
---|---|---|
SHA256 | 3e3b6448eb79b0d181b41df66f826fa54d4fa9986f4dc2a26ccdf135f8b95b44 |
|
MD5 | c77b778cf9788495d2d4a73ee8756257 |
|
BLAKE2b-256 | 6c2452daa6e1bc8c3045876d22f476dd5e5736a01d7b23073081104fc6649ac9 |