Database locking
Project description
Usage
The simplest use is by using it as a context manager:
with NonBlockingLock.objects.acquire_lock(obj=model_obj): model_obj.do_something()
Or you can keep track of the lock yourself:
try: lock = NonBlockingLock.objects.acquire_lock(obj=model_obj) except AlreadyLocked: return False model_obj.do_something() lock.release()
If you have no Django model, or you want to be able to specify the lock name yourself, you can do that too:
# this will raise AlreadyLocked, if it's locked lock = NonBlockingLock.objects.acquire_lock(lock_name='my_lock') do_something() lock.release()
Test
You can run the tests with
tox
Wishlist
Add lock time-out (try to aquire a lock for up to a given TIME_OUT), like lockfile’s FileLock.aquire
Global locks (for instance on a whole Model not just an object)
Releases
- v2.0.0:
Merging of master and pre-django-1.8 branches Removes management command in favor of a celery task
- v1.2.1:
Fix problem in migration to UUIDField for PostGres
- v1.2.0:
Move id to UUIDField, add code quality checks and CI
- v1.1.0:
Rename model to NonBlockingLock and add additional features
- v1.0.1:
Corrected tests and code clean-up
- v1.0.0:
Intial release.
Project details
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
Hashes for django_db_locking-2.0.0-py2-none-any.whl
Algorithm | Hash digest | |
---|---|---|
SHA256 | 45b639b4cc8eaa4cb795ef31452bdddcca9b90976623b96b8258d021c8e99889 |
|
MD5 | ce824c38f7385e286094afa385484ec1 |
|
BLAKE2b-256 | ee490c31397aaaed3b9735adfd5862fc4f5fa322e534f123fe23793d7fc5b803 |