Redis Semaphore Eval

https://redislabs.com/ebook/part-2-core-concepts/chapter-6-application-components-in-redis/6-3-counting-semaphores/
Usage
To acquire a lock:
from redis import Redis
from redis_semaphore_eval import semaphore
redis = Redis(host="localhost", port=6379, db=0)
key = "unique_lock_key"
with semaphore(redis, key=key, limit=2, expire_in=5, timeout=1) as lock_id:
...
To acquire a lock but continuously renew it in a background thread:
from redis import Redis
from redis_semaphore_eval import auto_renewing_semaphore
redis = Redis(host="localhost", port=6379, db=0)
key = "unique_lock_key"
with auto_renewing_semaphore(
redis,
key=key,
limit=2,
expire_in=5,
timeout=1,
auto_renewal_interval=4
) as lock_id:
...
Contributing
poetry run pre-commit install -t pre-commit -t commit-msg && poetry run pre-commit run --all
docker-compose up -d
poetry run python -m pytest
docker-compose down