python-3.x - 如何使用 Python 正确使用锁定功能
问题描述
我一直在将 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.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 使用适当的锁定功能,以便在使用特定密钥时阻止多个脚本。
解决方案
推荐阅读
- vb.net - 如何阻止或阻止消息框弹出?
- javascript - Material.io - 一些材料设计库的组件没有被正确渲染
- unity3d - 滚动视图掩码不能统一工作
- r - R中的colorRampPalette超过2个集群
- python - 在文件行中找到匹配项,然后转到下一个文件
- visual-studio-code - 是否有在 Visual Studio Code 中运行“mstest”测试的扩展
- php - 出现致命错误 config.php 第 14 行
- docker - 如何使用 SELinux 在 Kubernetes 中挂载 HostPath 卷
- c++ - 为什么自删除的全局 Vulkan 实例仅在添加层时才会导致段错误?
- javascript - 如何在我的 mysql 结果中乘以 html 字段?