Python 3.x 如何使用Python正确使用锁函数
我一直在使用Redis和Python,我想学习如何锁定给定的密钥。基本上,如果一把钥匙正在做一些工作。我们应该锁定它,直到它完成,然后释放它。目前我已经做了:Python 3.x 如何使用Python正确使用锁函数,python-3.x,redis,Python 3.x,Redis,我一直在使用Redis和Python,我想学习如何锁定给定的密钥。基本上,如果一把钥匙正在做一些工作。我们应该锁定它,直到它完成,然后释放它。目前我已经做了: #!/usr/bin/python3 # -*- coding: utf-8 -*- import random import sys import time from threading import Thread import serialized_redis redis_connection = serialized_redis
#!/usr/bin/python3
# -*- coding: utf-8 -*-
import random
import sys
import time
from threading import Thread
import serialized_redis
redis_connection = serialized_redis.MsgpackSerializedRedis(host='localhost', port=6379, db=0)
def algorihm(random_number_given):
try:
is_being_solved = redis_connection.get(f"number_{random_number_given}")["isBeingSolved"]
except: # if we dont find isBeingSolved, that would give us an exception, then means its not there
is_being_solved = False
if not is_being_solved:
print(f"Solving -> Lock: number_{random_number_given}")
redis_connection.set(
f"number_{random_number_given}",
{
"isBeingSolved": True
}
)
time.sleep(10)
print(f"Solved -> Release: number_{random_number_given}")
redis_connection.set(
f"number_{random_number_given}",
{
"finished": "Well done!"
}
)
return True
else:
print(f"Already in use -> number_{random_number_given}")
return False
def main():
while True:
response = algorihm(f"number_{random.randint(1, 3)}")
if response:
print("Yay, finished my job!")
sys.exit()
else:
print("Trying new number!")
time.sleep(3)
for i in range(5):
Thread(
target=main,
).start()
time.sleep(0.1)
我的问题是,我确实使用了很多连接,在这些连接之间,我担心会发生死锁,或者在这段时间会使用高强度的CPU
另一个问题是,稍后我将使用多个脚本,这些脚本有一个共享的redis数据库,但它们都有不同的功能,这意味着我不能对多个脚本使用锁函数本身
我想知道如何为redis使用适当的锁定功能,以便在使用特定密钥时阻止多个脚本