Distributed lock manager, support many types of backend, e.g. redis, django-redis, etcd, zookeeper...
Project description
globallock
Distributed lock manager, support many types of backend, e.g. redis, django-redis, etcd, zookeeper...
Install
pip install globallock
Notice: there're two l in globallock.
RedisGlobalLock Usage
from globallock import GlobalLockManager
from globallock import REDIS_GLOBAL_LOCK_CLASS
# RedisGlobalLock is the default engine class,
# so config item global_lock_engine_class is optional here
config = {
"global_lock_engine_class": REDIS_GLOBAL_LOCK_CLASS, # optional
"global_lock_engine_options": {
# redis connection pool init options goes here...
"host": "xxx",
"port": 6379,
"password": "xxx",
"db": 0,
}
}
lockman = GlobalLockManager(config)
lockname = "your unique lock name"
with lockman.lock(lockname, timeout=60, blocking=True, blocking_timeout=5) as lock:
if lock.is_locked:
pass # do something with lock...
else:
pass # do something without lock, mostly do NOTHING...
DjangoRedisGlobalLock Usage
from globallock import GlobalLockManager
from globallock import DJANGO_REDIS_GLOBAL_LOCK_CLASS
config = {
"global_lock_engine_class": DJANGO_REDIS_GLOBAL_LOCK_CLASS, # required
"global_lock_engine_options": {
"redis-cache-name": "default", # redis-cache-name is default to `default`
}
}
lockman = GlobalLockManager(config)
lockname = "your unique lock name"
with lockman.lock(lockname, timeout=60, blocking=True, blocking_timeout=5) as lock:
if lock.is_locked:
pass # do something with lock...
else:
pass # do something without lock, mostly do NOTHING...
EtcdGlobalLock Usage
from globallock import GlobalLockManager
from globallock import ETCD_GLOBAL_LOCK_CLASS
config = {
"global_lock_engine_class": ETCD_GLOBAL_LOCK_CLASS, # required
"global_lock_engine_options": {
# etcd3 client init options goes here...
}
}
lockman = GlobalLockManager(config)
lockname = "your unique lock name"
with lockman.lock(lockname, timeout=60, blocking=True, blocking_timeout=5) as lock:
if lock.is_locked:
pass # do something with lock...
else:
pass # do something without lock, mostly do NOTHING...
ZookeeperGlobalLock Usage
from globallock import GlobalLockManager
from globallock import ZOOKEEPER_GLOBAL_LOCK_CLASS
config = {
"global_lock_engine_class": ZOOKEEPER_GLOBAL_LOCK_CLASS, # required
"global_lock_engine_options": {
# KazooClient init options goes here...
}
}
lockman = GlobalLockManager(config)
lockname = "your unique lock name"
with lockman.lock(lockname, blocking=True, blocking_timeout=5) as lock:
if lock.is_locked:
pass # do something with lock...
else:
pass # do something without lock, mostly do NOTHING...
Notice:
timeoutparameter forlockman.lock()will not work for ZookeeperGlobalLock.- With ZookeeperGlobalLock, if the process which ownned the lock kill without any signal(kill -9), other process can acquire the lock after a short time(about 10 seconds after the lock-owner process killed). With other global lock engine, you have to wait the lock's
timeouteffect, after the the lock-owner process killed.
Engine Class Requirements
- RedisGlobalLock:
pip install redis
- DjangRedisGlobalLock:
pip install django-redis
- EtcdGlobalLock:
- You need to download the source code of etcd3 from
https://github.com/kragniz/python-etcd3, and install it with shell command (pip install .). You can NOT install it viapip install etcd3. The latest version of etcd3 installed via pip is 0.12.0, but it can not work with it's requires packages of latest version. - Of course, if the
etcd3package published in pypi upgraded, you can try to install it via pip command. - Before the
etcd3projects goes on and release new package to fix the problems, you need anotheretcd3package instead.
- You need to download the source code of etcd3 from
- ZookeeperGlobalLock:
pip install kazoo
Notice: The packages above are not added to the package's requirements.txt, so you need to install them by yourself, or put them into your projects' requirements.txt.
Test Passed With Pythons
- python36
- python37
- python38
- python39
- python310
- python311
Releases
v0.1.0
- First release.
- Add RedisGlobalLock implementations.
- Add DjangoRedisGlobalLock implementations.
- Add EtcdGlobalLock implementations.
- Add ZookeeperGlobalLock implementations.
v0.1.1
- Doc update.
v0.1.2
- GlobalLockManager.lock方法参数可以在初始化时设置。
- 添加globallock.django.get_default_global_lock_manager方法,允许在django中使用全局分布式锁。
v0.1.3
- 修正globallock.django默认设置。
v0.1.4
- Doc update.
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
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
File details
Details for the file globallock-0.1.4.tar.gz.
File metadata
- Download URL: globallock-0.1.4.tar.gz
- Upload date:
- Size: 9.6 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.1.0 CPython/3.11.12
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
4c8d3ec54e35ebbef7bc679347c22159b743a243447e2bcd7dc4188b23981f57
|
|
| MD5 |
98a59500bfb026acb610a78302e87dd1
|
|
| BLAKE2b-256 |
b5088e9368c6bb259fcc96fdbe22f508aab2be7abb0349ee035829880d04a4be
|
File details
Details for the file globallock-0.1.4-py3-none-any.whl.
File metadata
- Download URL: globallock-0.1.4-py3-none-any.whl
- Upload date:
- Size: 10.2 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.1.0 CPython/3.11.12
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
74fc5b76e378ee41f3f8a2164a3b82b46c0acd51028ba2243649822477ae94b9
|
|
| MD5 |
d65983689efee765b2129a576c73167b
|
|
| BLAKE2b-256 |
97ed15c69b5dacc47096d5460b6c1cfbeafdcd790e9c69903dbcaca6ed5388a7
|