Python DynamoDB Lock
This is a general purpose distributed locking library built on top of DynamoDB. It is heavily “inspired” by the java-based AmazonDynamoDBLockClient library, and supports both coarse-grained and fine-grained locking.
Free software: Apache Software License 2.0
Documentation: https://python-dynamodb-lock.readthedocs.io
Source Code: https://github.com/mohankishore/python_dynamodb_lock
Features
Acquire named locks - with configurable retry semantics
Periodic heartbeat/update for the locks to keep them alive
Auto-release the locks if there is no heartbeat for a configurable lease-duration
Notify an app-callback function if the lock is stolen, or gets too close to lease expiry
Store arbitrary application data along with the locks
Uses monotonically increasing clock to avoid issues due to clock skew and/or DST etc.
Auto-delete the database entries after a configurable expiry-period
Consistency Notes
Note that while the lock itself can offer fairly strong consistency guarantees, it does NOT participate in any kind of distributed transaction.
For example, you may wish to acquire a lock for some customer-id “xyz”, and then make some changes to the corresponding database entry for this customer-id, and then release the lock - thereby guaranteeing that only one process changes any given customer-id at a time.
While the happy path looks okay, consider a case where the application changes take a long time, and some errors/gc-pauses prevent the heartbeat from updating the lock. Then, some other client can assume the lock to be abandoned, and start processing the same customer in parallel. The original lock-client will recognize that its lock has been “stolen” and will let the app know through a callback event, but the app may have already committed its changes to the database. This can only be solved by having the application changes and the lock-release be part of a single distributed transaction - which, as indicated earlier, is NOT supported.
That said, in most cases, where the heartbeat is not expected to get delayed beyond the lock’s lease duration, the implementation should work just fine.
Refer to an excellent post by Martin Kleppmann on this subject: https://martin.kleppmann.com/2016/02/08/how-to-do-distributed-locking.html
Credits
AmazonDynamoDBLockClient: https://github.com/awslabs/dynamodb-lock-client
Cookiecutter: https://github.com/audreyr/cookiecutter
Cookiecutter Python: https://github.com/audreyr/cookiecutter-pypackage
History
0.9.0 (2018-10-28)
First release on PyPI.
Release files for python-dynamodb-lock 0.9.1
For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.
Source distribution (sdist)
| File | Size | Uploaded | |
|---|---|---|---|
| python_dynamodb_lock-0.9.1.tar.gz | 27.2 kB | Details |
Built distribution (wheel)
| File | Interpreter | ABI | Platform | Reset |
|---|---|---|---|---|
| python_dynamodb_lock-0.9.1-py2.py3-none-any.whl | Python 2, Python 3 | none | any | Details |
Total release size: 41.4 kB
Release files / python_dynamodb_lock-0.9.1.tar.gz
| Download URL | python_dynamodb_lock-0.9.1.tar.gz |
|---|---|
| Size | 27.2 kB |
| Tags | Source |
|
SHA-256 checksum How to use checksums |
87b3659293cee4b023342b881ff9e4c9435ffec0c12e935a36ddca6829ffda07
|
|
BLAKE2b-256 checksum How to use checksums |
ac944aca685482ddba53e9c7b2eaf9b8e8f18012c0fd36ad67ca31e9b4699f07
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
twine/1.12.1 pkginfo/1.4.2 requests/2.20.0 setuptools/40.5.0 requests-toolbelt/0.8.0 tqdm/4.28.1 CPython/3.6.3
|
Release files / python_dynamodb_lock-0.9.1-py2.py3-none-any.whl
| Download URL | python_dynamodb_lock-0.9.1-py2.py3-none-any.whl |
|---|---|
| Size | 14.2 kB |
| Tags | Python 2 Python 3 |
|
SHA-256 checksum How to use checksums |
5a5c66d9bdbfdc37c53db38064dc8dd7a246e84bae09d5edb530befa5a347215
|
|
BLAKE2b-256 checksum How to use checksums |
d113dd519670814a5b7cb1f82e3db20bd41e1ad52eeaeb1ef49e0732ba80b0fe
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
twine/1.12.1 pkginfo/1.4.2 requests/2.20.0 setuptools/40.5.0 requests-toolbelt/0.8.0 tqdm/4.28.1 CPython/3.6.3
|