
Product
Socket Now Supports pylock.toml Files
Socket now supports pylock.toml, enabling secure, reproducible Python builds with advanced scanning and full alignment with PEP 751's new standard.
.. image:: https://github.com/joanvila/aioredlock/workflows/Tests/badge.svg :target: https://travis-ci.org/joanvila/aioredlock
.. image:: https://codecov.io/gh/joanvila/aioredlock/branch/master/graph/badge.svg :target: https://codecov.io/gh/joanvila/aioredlock
.. image:: https://badge.fury.io/py/aioredlock.svg :target: https://pypi.python.org/pypi/aioredlock
The asyncio redlock_ algorithm implementation.
The redlock algorithm is a distributed lock implementation for Redis_. There are many implementations of it in several languages. In this case, this is the asyncio_ compatible implementation for python 3.5+.
.. code-block:: python
from aioredlock import Aioredlock, LockError, Sentinel
redis_instances = [ ('localhost', 6379), {'host': 'localhost', 'port': 6379, 'db': 1}, 'redis://localhost:6379/2', Sentinel(('localhost', 26379), master='leader', db=3), Sentinel('redis://localhost:26379/4?master=leader&encoding=utf-8'), Sentinel('rediss://:password@localhost:26379/5?master=leader&encoding=utf-8&ssl_cert_reqs=CERT_NONE'), ]
lock_manager = Aioredlock(redis_instances)
assert not await lock_manager.is_locked("resource_name")
try: lock = await lock_manager.lock("resource_name", lock_timeout=10) except LockError: print('Lock not acquired') raise
assert lock.valid assert await lock_manager.is_locked("resource_name")
await lock_manager.extend(lock, lock_timeout=10)
await lock_manager.unlock(lock)
assert not lock.valid assert not await lock_manager.is_locked("resource_name")
try: async with await lock_manager.lock("resource_name") as lock: assert lock.valid is True # Do your stuff having the lock await lock.extend() # alias for lock_manager.extend(lock) # Do more stuff having the lock assert lock.valid is False # lock will be released by context manager except LockError: print('Lock not acquired') raise
await lock_manager.destroy()
The Aioredlock constructor accepts the following optional parameters:
redis_connections
: A list of connections (dictionary of host and port and kwargs for aioredis.create_redis_pool()
, or tuple (host, port)
, or string Redis URI) where the Redis instances are running. The default value is [{'host': 'localhost', 'port': 6379}]
.retry_count
: An integer representing number of maximum allowed retries to acquire the lock. The default value is 3
times.retry_delay_min
and retry_delay_max
: Float values representing waiting time (in seconds) before the next retry attempt. The default values are 0.1
and 0.3
, respectively.In order to acquire the lock, the lock
function should be called. If the lock operation is successful, lock.valid
will be true, if the lock is not acquired then the LockError
will be raised.
From that moment, the lock is valid until the unlock
function is called or when the lock_timeout
is reached.
Call the extend
function to reset lifetime of the lock to lock_timeout
interval.
Use the is_locked
function to check if the resource is locked by other redlock instance.
In order to clear all the connections with Redis, the lock_manager destroy
method can be called.
.. _redlock: https://redis.io/topics/distlock .. _Redis: https://redis.io .. _asyncio: https://docs.python.org/3/library/asyncio.html
FAQs
Asyncio implemetation of Redis distributed locks
We found that aioredlock demonstrated a healthy version release cadence and project activity because the last version was released less than a year ago. It has 2 open source maintainers collaborating on the project.
Did you know?
Socket for GitHub automatically highlights issues in each pull request and monitors the health of all your open source dependencies. Discover the contents of your packages and block harmful activity before you install or update your dependencies.
Product
Socket now supports pylock.toml, enabling secure, reproducible Python builds with advanced scanning and full alignment with PEP 751's new standard.
Security News
Research
Socket uncovered two npm packages that register hidden HTTP endpoints to delete all files on command.
Research
Security News
Malicious Ruby gems typosquat Fastlane plugins to steal Telegram bot tokens, messages, and files, exploiting demand after Vietnam’s Telegram ban.