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 need another etcd3 package instead.
  • 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

globallock-0.1.4.tar.gz (9.6 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

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

Uploaded Python 3

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

Hashes for globallock-0.1.4.tar.gz
Algorithm Hash digest
SHA256 4c8d3ec54e35ebbef7bc679347c22159b743a243447e2bcd7dc4188b23981f57
MD5 98a59500bfb026acb610a78302e87dd1
BLAKE2b-256 b5088e9368c6bb259fcc96fdbe22f508aab2be7abb0349ee035829880d04a4be

See more details on using hashes here.

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

Hashes for globallock-0.1.4-py3-none-any.whl
Algorithm Hash digest
SHA256 74fc5b76e378ee41f3f8a2164a3b82b46c0acd51028ba2243649822477ae94b9
MD5 d65983689efee765b2129a576c73167b
BLAKE2b-256 97ed15c69b5dacc47096d5460b6c1cfbeafdcd790e9c69903dbcaca6ed5388a7

See more details on using hashes here.

Supported by

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