- 
                Notifications
    You must be signed in to change notification settings 
- Fork 2.6k
Closed
Description
Reproduce code:
import redis
import threading
import time
# Create Redis client
r = redis.Redis()
lock_name = "lock:example"
def thread1_function():
    print("Thread 1: Starting")
    
    lock = r.lock(lock_name, timeout=5)
    if lock.acquire():
        print("Thread 1: Lock acquired")
def thread2_function():
    print("Thread 2: Starting")
    lock = r.lock(lock_name)
    try:
        lock.release()
    except Exception as e:
        print(f"Thread 2: Lock error: {e}")
# Create and start threads
t1 = threading.Thread(target=thread1_function)
t2 = threading.Thread(target=thread2_function)
t1.start()
time.sleep(1)
t2.start()
# Wait for threads to complete
t1.join()
t2.join()
# clean up
r.delete(lock_name)Output:
Thread 1: Starting
Thread 1: Lock acquired
Thread 2: Starting
Thread 2: Lock error: Cannot release an unlocked lock
Currently, if we release lock from thread2, we got Lock error with Lock error: Cannot release an unlocked lock, which is not true actually and will mislead the user in a way.
Metadata
Metadata
Assignees
Labels
No labels