Use memcache as a lock server
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…