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
Built Distribution
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
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
|