{"library":"python-redis-lock","title":"Python Redis Lock","description":"python-redis-lock is a Python library that provides a distributed lock context manager, implemented using Redis's `SETNX` (SET if Not eXists) and `BLPOP` operations. It aims to offer an interface similar to Python's built-in `threading.Lock`. The current version is 4.0.1, and it maintains an active release cadence, with its latest major update in late 2022.","language":"python","status":"active","last_verified":"Fri May 15","install":{"commands":["pip install python-redis-lock"],"cli":null},"imports":["from redis_lock import Lock"],"auth":{"required":false,"env_vars":[]},"quickstart":{"code":"import redis\nimport time\nimport os\nfrom redis_lock import Lock\n\nREDIS_HOST = os.environ.get('REDIS_HOST', 'localhost')\nREDIS_PORT = int(os.environ.get('REDIS_PORT', 6379))\n\n# Connect to Redis\nclient = redis.Redis(host=REDIS_HOST, port=REDIS_PORT, db=0)\n\nlock_name = \"my-distributed-lock\"\n\n# Acquire a lock using a context manager, with a 10-second expiration\n# and automatic renewal while the 'with' block is active.\nprint(f\"Attempting to acquire lock '{lock_name}'...\")\nwith Lock(client, lock_name, expire=10, auto_renewal=True, blocking_timeout=5) as lock:\n    if lock.acquired:\n        print(f\"Lock '{lock_name}' acquired! Doing some critical work...\")\n        # Simulate work that takes longer than the expire time\n        # auto_renewal will keep the lock alive.\n        time.sleep(15)\n        print(f\"Work finished. Lock '{lock_name}' will be automatically released.\")\n    else:\n        print(f\"Failed to acquire lock '{lock_name}'. Another process holds it.\")\n\n# You can also check if a lock is currently held (by anyone)\nif Lock(client, lock_name).locked():\n    print(f\"Lock '{lock_name}' is currently held by someone else (or was not properly released).\")\nelse:\n    print(f\"Lock '{lock_name}' is not currently held.\")\n\nclient.close()","lang":"python","description":"This quickstart demonstrates how to acquire and use a distributed lock with `python-redis-lock` using a context manager. It highlights setting an expiration (`expire`) and enabling automatic renewal (`auto_renewal`) to prevent locks from being held indefinitely if the application crashes. It also shows checking the lock status.","tag":null,"tag_description":null,"last_tested":null,"results":[]},"compatibility":{"tag":null,"tag_description":null,"last_tested":"2026-05-15","installed_version":"4.0.1","pypi_latest":"4.0.1","is_stale":false,"summary":{"python_range":"3.10–3.9","success_rate":100,"avg_install_s":1.9,"avg_import_s":0.41,"wheel_type":"wheel"},"results":[{"runtime":"python:3.10-alpine","python_version":"3.10","os_libc":"alpine (musl)","variant":"python-redis-lock","exit_code":0,"wheel_type":"wheel","failure_reason":null,"import_side_effects":"clean","install_time_s":null,"import_time_s":0.32,"mem_mb":10.3,"disk_size":"21.7M"},{"runtime":"python:3.10-slim","python_version":"3.10","os_libc":"slim (glibc)","variant":"python-redis-lock","exit_code":0,"wheel_type":"wheel","failure_reason":null,"import_side_effects":"clean","install_time_s":1.8,"import_time_s":0.22,"mem_mb":10.3,"disk_size":"22M"},{"runtime":"python:3.11-alpine","python_version":"3.11","os_libc":"alpine (musl)","variant":"python-redis-lock","exit_code":0,"wheel_type":"wheel","failure_reason":null,"import_side_effects":"clean","install_time_s":null,"import_time_s":0.41,"mem_mb":11.9,"disk_size":"24.2M"},{"runtime":"python:3.11-slim","python_version":"3.11","os_libc":"slim (glibc)","variant":"python-redis-lock","exit_code":0,"wheel_type":"wheel","failure_reason":null,"import_side_effects":"clean","install_time_s":1.9,"import_time_s":0.37,"mem_mb":11.9,"disk_size":"25M"},{"runtime":"python:3.12-alpine","python_version":"3.12","os_libc":"alpine (musl)","variant":"python-redis-lock","exit_code":0,"wheel_type":"wheel","failure_reason":null,"import_side_effects":"clean","install_time_s":null,"import_time_s":0.59,"mem_mb":11.9,"disk_size":"15.9M"},{"runtime":"python:3.12-slim","python_version":"3.12","os_libc":"slim (glibc)","variant":"python-redis-lock","exit_code":0,"wheel_type":"wheel","failure_reason":null,"import_side_effects":"clean","install_time_s":1.8,"import_time_s":0.58,"mem_mb":11.9,"disk_size":"16M"},{"runtime":"python:3.13-alpine","python_version":"3.13","os_libc":"alpine (musl)","variant":"python-redis-lock","exit_code":0,"wheel_type":"wheel","failure_reason":null,"import_side_effects":"clean","install_time_s":null,"import_time_s":0.61,"mem_mb":12.1,"disk_size":"15.6M"},{"runtime":"python:3.13-slim","python_version":"3.13","os_libc":"slim (glibc)","variant":"python-redis-lock","exit_code":0,"wheel_type":"wheel","failure_reason":null,"import_side_effects":"clean","install_time_s":1.8,"import_time_s":0.54,"mem_mb":12.1,"disk_size":"16M"},{"runtime":"python:3.9-alpine","python_version":"3.9","os_libc":"alpine (musl)","variant":"python-redis-lock","exit_code":0,"wheel_type":"wheel","failure_reason":null,"import_side_effects":"clean","install_time_s":null,"import_time_s":0.27,"mem_mb":9.7,"disk_size":"20.6M"},{"runtime":"python:3.9-slim","python_version":"3.9","os_libc":"slim (glibc)","variant":"python-redis-lock","exit_code":0,"wheel_type":"wheel","failure_reason":null,"import_side_effects":"clean","install_time_s":2,"import_time_s":0.24,"mem_mb":9.7,"disk_size":"21M"}]}}