Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/redis/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/kotlin/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 3.x 如何使用Python正确使用锁函数_Python 3.x_Redis - Fatal编程技术网

Python 3.x 如何使用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

我一直在使用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使用适当的锁定功能,以便在使用特定密钥时阻止多个脚本