mongolock
Python Mongodb based Distributed Lock
Python Mongodb based Distributed Lock
To install this package, run one of the following:
from mongolock import MongoLock
lock = MongoLock()
# you can use it as context:
# (if lock is already taken by another worker, MongoLockLocked will be raised)
with lock('key', 'my_worker_name', expires=60, timeout=10):
# some work here
# or simply by calling methods:
if lock.lock('key', 'my_worker_name'):
try:
# some useful work
finally:
lock.release('key', 'my_worker_name')
# you can also renew lock by touching it:
with lock('key', 'my_worker_name', expires=60, timeout=10):
# some looong looong work here
lock.touch('key', 'my_worker_name')
Parameters in lock method:
key - name of task to lockowner - name of worker which takes a lockexpire (optional) - duration in seconds after which lock can be stealedtimeout (optional) - how long we can wait for a lock (in seconds)You can configure connection either by specifying connection string,
lock = MongoLock('localhost:27017')
or by passing configured instance of MongoClient/MongoReplicaSetClient in MongoLock constructor:
client = MongoClient('localhost:27017')
lock = MongoLock(client=client)
The second is preferred, as in such a way you can perform more fine grained configuration:
You should use unique names for all your workers, if you don't - some strange things may happen. Consider following sequence:
If you use cron (or some analogue) to launch tasks on different machines, take in account time drift between machines as well as duration of critical section of your tasks.
To prevent such a weird situation, you can simply add some part of time (for example YmdHM) to a key with task name.
Summary
Python Mongodb based Distributed Lock
Last Updated
May 20, 2016 at 02:10
License
BSD
Supported Platforms