memcachelock

Use memcache as a lock server


Keywords
memcache, lock
License
GPL-2.0+
Install
pip install memcachelock==0.4

Documentation

Python module using memcache as a lock server.

Disclaimer: This code is inspired by unimr.memcachedlock . I thought I could
write a simpler version of MemcachedRLock class to keep dependencies minimal
(python builtins plus python-memcache), and enforcing support of gets/cas API.

WARNING: little testing has been done so far. Better review & stress
this code before using it anywhere for the moment.

Example usage:
import memcachelock
import memcache
# python-memcached doesn't do cas correctly without cache_cas
mc = memcache.Client(['127.0.0.1:11211'], cache_cas=True)
# Non-reentrant lock
mclock = memcachelock.Lock(mc, 'foo_resource')
# Per-connection reentrant lock
mcrlock = memcachelock.RLock(mc, 'foo_resource')
# Per-connection and per-thread reentrant lock
rmcrlock = memcachelock.ThreadRLock(mc, 'foo_resource')

All lock instances have the same API as thread.LockType (as of python
2.7).
'foo_resource' is any string usable as a memcache key identifying some
resource this lock protects. In Zope world, it might be a traversable object's
path, or a database identifier plus some database-scoped unique identifier...