Skip to main content

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 for lockman.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 via pip 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 can pip install zencore-etcd3 instead. zencore-etcd3 is just pull the latest source code of etcd3 form https://github.com/kragniz/python-etcd3, build it as pypi package and upload it to the pypi site.
  • 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中使用全局分布式锁。

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.2.tar.gz (8.9 kB view details)

Uploaded Source

Built Distribution

globallock-0.1.2-py3-none-any.whl (10.2 kB view details)

Uploaded Python 3

File details

Details for the file globallock-0.1.2.tar.gz.

File metadata

  • Download URL: globallock-0.1.2.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

Hashes for globallock-0.1.2.tar.gz
Algorithm Hash digest
SHA256 a38de1807b02bac3621a4bcc457dc97903fa99627e6826ead8dfdc6953478fae
MD5 2cfc527bef02095036739e4ae7fa3c20
BLAKE2b-256 3a0aafb95e21c798bb162d497b3039134754d35eccfffc232f0a4e08aa41487b

See more details on using hashes here.

File details

Details for the file globallock-0.1.2-py3-none-any.whl.

File metadata

  • Download URL: globallock-0.1.2-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

Hashes for globallock-0.1.2-py3-none-any.whl
Algorithm Hash digest
SHA256 8e27b28b4ef4fab41d0f7f0f8ef7fc42c72c52b78ba0332863c52b32a539d17c
MD5 fd318802f5f3c62e6e390d48e34ab921
BLAKE2b-256 5da7b25d21651029b9c4c6abe434f75dd38900a40c417e5808d431b46497c118

See more details on using hashes here.

Supported by

AWS AWS Cloud computing and Security Sponsor Datadog Datadog Monitoring Fastly Fastly CDN Google Google Download Analytics Microsoft Microsoft PSF Sponsor Pingdom Pingdom Monitoring Sentry Sentry Error logging StatusPage StatusPage Status page