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:
timeout
parameter 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
timeout
effect, 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
etcd3
package published in pypi upgraded, you can try to install it via pip command. - Before the
etcd3
projects goes on and release new package to fix the problems, you canpip install zencore-etcd3
instead.zencore-etcd3
is just pull the latest source code ofetcd3
formhttps://github.com/kragniz/python-etcd3
, build it as pypi package and upload it to the pypi site.
- 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默认设置。
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
globallock-0.1.3.tar.gz
(8.9 kB
view details)
Built Distribution
File details
Details for the file globallock-0.1.3.tar.gz
.
File metadata
- Download URL: globallock-0.1.3.tar.gz
- Upload date:
- Size: 8.9 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/4.0.2 CPython/3.11.5
File hashes
Algorithm | Hash digest | |
---|---|---|
SHA256 | cd0cf3c9101cec5cca0f97b5ac0be5d0158f478af78dc593f41b1436195bbf7c |
|
MD5 | e268d30ee93028a98f25c38fedf06a01 |
|
BLAKE2b-256 | 0450e396e92a9331d9958015bd4e12f283188be01daa9a8869cb2dc57cf867e8 |
File details
Details for the file globallock-0.1.3-py3-none-any.whl
.
File metadata
- Download URL: globallock-0.1.3-py3-none-any.whl
- Upload date:
- Size: 10.2 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/4.0.2 CPython/3.11.5
File hashes
Algorithm | Hash digest | |
---|---|---|
SHA256 | ddc04688171cd3b8f38eee04395cce16c6589fa7d59ae7a1e127e5fcf45fa4be |
|
MD5 | b912b04e7e704a477bdcd9818c3b59d0 |
|
BLAKE2b-256 | 29aee5eeb67cba7abb0e7ff51b409f3143148d9b12c2b1d83a3b900c306e0584 |